博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5464:Clarke and problem
阅读量:6815 次
发布时间:2019-06-26

本文共 1424 字,大约阅读时间需要 4 分钟。

Clarke and problem

 
 Accepts: 130
 
 Submissions: 781
 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
克拉克是一名人格分裂患者。某一天,克拉克分裂成了一个学生,在做题。 突然一道难题难到了克拉克,这道题是这样的:  给你nn个数,要求选一些数(可以不选),把它们加起来,使得和恰好是pp的倍数(00也是pp的倍数),求方案数。  对于nn很小的时候,克拉克是能轻易找到的。然而对于nn很大的时候,克拉克没有办法了,所以来求助于你。
输入描述
第一行一个整数T(1 \le T \le 10)T(1≤T≤10),表示数据的组数。  每组数据第一行是两个正整数n, p(1 \le n, p \le 1000)n,p(1≤n,p≤1000)。  接下来的一行有nn个整数a_i(|a_i| \le 10^9)ai(∣ai∣≤109),表示第ii个数。
输出描述
对于每组数据,输出一个整数,表示问题的方案数,由于答案很大,所以求出对10^9+7109+7的答案即可。
输入样例
12 31 2
输出样例
2
Hint
有两种方案:什么也不选;全都选。

做的时候自己看到ai的数值觉得太大就放弃了,结果原来p就是一个小于等于1000的数。

就是看余数啊,这种题自己也做过很多个了,为什么就是不长记性呢。。。

代码:

#include 
#include
#include
#include
#include
#include
#pragma warning(disable:4996)using namespace std;const int mod = 1e9 + 7;int test, n, p;long long a[1005];long long dp[1005][1005];int main(){ //freopen("i.txt","r",stdin); //freopen("o.txt","w",stdout); int i, j; cin >> test; while (test--) { cin >> n >> p; for (i = 1; i <= n; i++) { cin >> a[i]; a[i] = a[i] % p; } memset(dp, 0, sizeof(dp)); dp[0][0] = 1; for (i = 1; i <= n; i++) { for (j = 0; j < p; j++) { dp[i][j] = (dp[i - 1][j] + dp[i - 1][(j + p - a[i]) % p]) % mod; } } cout << dp[n][0] << endl; } //system("pause"); return 0;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/lightspeedsmallson/p/4899572.html

你可能感兴趣的文章
nullpointerxception——处理思路
查看>>
使用 jsPlumb 绘制拓扑图 —— 异步载入与绘制的实现
查看>>
vue - 组件基础
查看>>
eclipse如何集成tomcat插件
查看>>
【41】了解隐式接口和编译期多态
查看>>
提问的智慧:利用决策树进行推荐系统新用户引导
查看>>
lucene 大小库 索引
查看>>
JAVA研发工程师(YF)
查看>>
HTTP协议以及PYTHON开发技巧
查看>>
中国互联网创业,最好的城市是哪里?
查看>>
xml.modify() 实例演示
查看>>
端口被占用了,使用netstat找到占用端口的进程
查看>>
我的vim colorscheme - 白色之夜 - 博客园
查看>>
ECSHOP 商品页详情页 添加同类随机商品
查看>>
Select函数
查看>>
【译】UNIVERSAL IMAGE LOADER. PART 3---ImageLoader详解
查看>>
再探迭代器(插入迭代器、流迭代器、反向迭代器、移动迭代器)
查看>>
hdu1181 (变形课)简单地dfs
查看>>
75. Sort Colors
查看>>
WorldWind源码剖析系列:视景体类Frustum
查看>>