Clarke and problem

问题描述
  1. 克拉克是一名人格分裂患者。某一天,克拉克分裂成了一个学生,在做题。
  2. 突然一道难题难到了克拉克,这道题是这样的:
  3. 给你nn个数,要求选一些数(可以不选),把它们加起来,使得和恰好是pp的倍数(00也是pp的倍数),求方案数。
  4. 对于nn很小的时候,克拉克是能轻易找到的。然而对于nn很大的时候,克拉克没有办法了,所以来求助于你。
输入描述
  1. 第一行一个整数T(1 \le T \le 10)T(1T10),表示数据的组数。
  2. 每组数据第一行是两个正整数n, p(1 \le n, p \le 1000)n,p(1n,p1000)。
  3. 接下来的一行有nn个整数a_i(|a_i| \le 10^9)ai​​(∣ai​​∣≤109​​),表示第ii个数。
输出描述
  1. 对于每组数据,输出一个整数,表示问题的方案数,由于答案很大,所以求出对10^9+7109​​+7的答案即可。
输入样例
  1. 1
  2. 2 3
  3. 1 2
输出样例
  1. 2
Hint
  1. 有两种方案:什么也不选;全都选。
  2.  
  3. 一眼dp
  1. //
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<string>
  6. #include<algorithm>
  7. #include<queue>
  8. #include<cmath>
  9. #include<map>
  10. #include<bitset>
  11. #include<set>
  12. #include<vector>
  13. #include<stack>
  14. using namespace std ;
  15. typedef long long ll;
  16. #define mem(a) memset(a,0,sizeof(a))
  17. #define meminf(a) memset(a,127,sizeof(a));
  18. #define memfy(a) memset(a,-1,sizeof(a))
  19. #define TS printf("111111\n");
  20. #define FOR(i,a,b) for( int i=a;i<=b;i++)
  21. #define FORJ(i,a,b) for(int i=a;i>=b;i--)
  22. #define READ(a,b) scanf("%d%d",&a,&b)
  23. #define mod 1000000007
  24. #define maxn 1501
  25. inline ll read()
  26. {
  27. ll x=,f=;
  28. char ch=getchar();
  29. while(ch<''||ch>'')
  30. {
  31. if(ch=='-')f=-;
  32. ch=getchar();
  33. }
  34. while(ch>=''&&ch<='')
  35. {
  36. x=x*+ch-'';
  37. ch=getchar();
  38. }
  39. return x*f;
  40. }
  41. //****************************************
  42.  
  43. ll dp[][];
  44. ll n,p,a[maxn];
  45. int main()
  46. {
  47.  
  48. int T=read();
  49. while(T--)
  50. {
  51. mem(dp);
  52. n=read();
  53. p=read();
  54. FOR(i,,n)
  55. {
  56. a[i]=read();
  57. if(a[i]<) a[i]=(a[i]%p+p)%p;
  58. else a[i]=a[i]%p;
  59. }
  60. dp[][]=;
  61. for(int i=;i<=n;i++)
  62. {
  63. for(int j=;j<p;j++)
  64. {
  65. dp[i][j]=(dp[i][j]+dp[i-][j])%mod;
  66. dp[i][(a[i]+j)%p]=(dp[i][(a[i]+j)%p]+dp[i-][j])%mod;
  67. }
  68. }
  69. cout<<(dp[n][])%mod<<endl;
  70. }
  71. return ;
  72. }

代码

BestCoder Round #56 /hdu5464 dp的更多相关文章

  1. BestCoder Round #56 1002 Clarke and problem 1003 Clarke and puzzle (dp,二维bit或线段树)

    今天第二次做BC,不习惯hdu的oj,CE过2次... 1002 Clarke and problem 和Codeforces Round #319 (Div. 2) B Modulo Sum思路差不 ...

  2. BestCoder Round #87 LCIS(dp)

    LCIS 要用dp的思路想这题 [题目链接]LCIS [题目类型]dp &题意: 给定两个序列,求它们的最长公共递增子序列的长度, 并且这个子序列的值是连续的,比如(x,x+1,...,y−1 ...

  3. HDU5465/BestCoder Round #56 (div.2) 二维树状数组

    Clarke and puzzle 问题描述 克拉克是一名人格分裂患者.某一天,有两个克拉克(aa和bb)在玩一个方格游戏. 这个方格是一个n*mn∗m的矩阵,每个格子里有一个数c_{i, j}c​i ...

  4. BestCoder Round #56/hdu5463 Clarke and minecraft 水题

    Clarke and minecraft 问题描述 克拉克是一名人格分裂患者.某一天,克拉克分裂成了一个游戏玩家,玩起了minecraft.渐渐地,克拉克建起了一座城堡. 有一天,克拉克为了让更多的人 ...

  5. BestCoder Round #89 02单调队列优化dp

    1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01  HDU 5944   水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...

  6. DP BestCoder Round #50 (div.2) 1003 The mook jong

    题目传送门 /* DP:这题赤裸裸的dp,dp[i][1/0]表示第i块板放木桩和不放木桩的方案数.状态转移方程: dp[i][1] = dp[i-3][1] + dp[i-3][0] + 1; dp ...

  7. [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP)

    [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP) 题面 有三个人从一张N个点无重边的有向无环图上的三个点出发,每单位时间,他们分别选择当前 ...

  8. Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp

    Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  9. bestcoder Round #7 前三题题解

    BestCoder Round #7 Start Time : 2014-08-31 19:00:00    End Time : 2014-08-31 21:00:00Contest Type : ...

随机推荐

  1. go的指针学习

    1)指针是什么? 一个指针变量可以指向任何一个值的内存地址它指向那个值的内存地址 说白了就是可以先存储内存的地址,在用内存地址找到对应值 2)go中的使用 Go 语言的取地址符是 &,放到一个 ...

  2. iOS缓存到sandbox

        在手机应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制,前面一篇文章介绍了iOS设备的内存缓存,这篇文章将设计一个本地缓存的机制. 功能需 ...

  3. BZOJ 3996 线性代数 最小割

    题意: 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大.其中A^T为A的转置.输出D 分析: 这道题比较绕,我们需要看清题目中那个式子的本 ...

  4. 笔试算法题(38):并查集(Union-Find Sets)

    议题:并查集(Union-Find Sets) 分析: 一种树型数据结构,用于处理不相交集合(Disjoint Sets)的合并以及查询:一开始让所有元素独立成树,也就是只有根节点的树:然后根据需要将 ...

  5. Tomcat8.0 JDK1.8 的详细配置 Win10

    官网下载 先安装JDK以及JRE 之后安装Tomcat jdk配置环境变量: 用户变量:path:C:\Program Files\Java\jdk1.8.0_161\bin     ( jdk安装的 ...

  6. 81-Gator Oscillator,加多摆动指标.(2015.7.1)

    Gator Oscillator 加多摆动指标 Oscillator,加多摆动指标.(2015.7.1)" title="81-Gator Oscillator,加多摆动指标.(2 ...

  7. Quartz --quartz.properties

    quartz.properties 如果项目中没有该配置文件,则会去jar包中读取自带配置文件 默认的配置如下 # Default Properties file for use by StdSche ...

  8. 【ZOJ - 3780】 Paint the Grid Again (拓扑排序)

    Leo has a grid with N × N cells. He wants to paint each cell with a specific color (either black or ...

  9. [luoguP1022] 计算器的改良(模拟)

    传送门 超级大模拟.. 代码 #include <cstdio> #include <cstring> #include <iostream> #define is ...

  10. bzoj 1049 [HAOI2006]数字序列

    [bzoj1049][HAOI2006]数字序列 Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不 ...