题目问从N个数中取出M个数,有多少种取法使它们的和能被D整除。

dp[i][j][k]表示,前i个数取出j个数模D的余数为k的方案数

我用“我为人人”的方式来转移,就从i到i+1转移,对于第i+1个数有取和不取两种选择,然后确定j和k这两个维度的情况。

另外题目说数字是32位有符号整数,所以是会出现负数的。。。模D之后加D再模D就行了。

 #include<cstdio>
#include<cstring>
using namespace std;
long long dp[][][];
int main(){
int t,n,q,a[],d,m;
scanf("%d",&t);
for(int cse=; cse<=t; ++cse){
scanf("%d%d",&n,&q);
for(int i=; i<n; ++i) scanf("%d",a+i);
printf("Case %d:\n",cse);
while(q--){
scanf("%d%d",&d,&m);
memset(dp,,sizeof(dp));
dp[][][(a[]%d+d)%d]=;
dp[][][]=;
for(int i=; i<n-; ++i){
for(int j=; j<=m; ++j){
for(int k=; k<d; ++k){
if(j<m) dp[i+][j+][((k+a[i+])%d+d)%d]+=dp[i][j][k];
dp[i+][j][k]+=dp[i][j][k];
}
}
}
printf("%lld\n",dp[n-][m][]);
}
}
return ;
}

LightOJ1125 Divisible Group Sums(DP)的更多相关文章

  1. LightOJ1125 Divisible Group Sums

    Divisible Group Sums Given a list of N numbers you will be allowed to choose any M of them. So you c ...

  2. Codeforces 626F Group Projects (DP)

    题目链接  8VC Venture Cup 2016 - Elimination Round 题意  把$n$个物品分成若干组,每个组的代价为组内价值的极差,求所有组的代价之和不超过$k$的方案数. ...

  3. Light oj 1125 - Divisible Group Sums (dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1125 题意: 给你n个数,q次询问,每次询问问你取其中m个数是d的整数倍的方案 ...

  4. Divisible Group Sums

    Divisible Group Sums Given a list of N numbers you will be allowed to choose any M of them. So you c ...

  5. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  6. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  7. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  8. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  9. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

随机推荐

  1. 新手选择使用 Linux 桌面的七个注意点

    导读 刚接触Linux桌面的用户该如何选择一款合适的Linux桌面环境呢?如果你习惯使用Windows或OS X,那么一想到要选择就让人犯难,那么你又该如何在十几个主要的Linux桌面.几十个次要的当 ...

  2. SELinux入门

    导读 如果你在之前的Linux生涯中都禁用或忽略了SELinux,这篇文章就是专门为你写的:这是一篇对存在于你的Linux桌面或服务器之下的SELinux系统的介绍,它能够限制权限,甚至消除程序或守护 ...

  3. iOS UILabel圆角

    对于UIView 直接设置 uiview.layer.cornerRadius = 5 就可以有圆角了 但是对于UILabel则不然, 要多设置一个uilabel.clipsToBounds = YE ...

  4. Windows2003操作系统SQL Server 2008安装图解(详细)

    最近不少用户在windows2003 server 32位操作系统上安装SQL Server2008总是失败,出现大量错误.今天经过通过我反复测试安装,找出了一个便捷的安装方法,节省大家宝贵时间,具体 ...

  5. A PHP extension for Facebook's RocksDB

    A PHP extension for Facebook's RocksDB 31 commits 2 branches 0 releases 2 contributors C++ 90.5% C 8 ...

  6. Linux统计文件个数

    查看某个文件夹下的文件个数用ls列目录,用grep过虑,再用wc统计即可 用ls -l列出后, 每一行对应一个文件或目录, 如果第一个字母为’-'则为普通文件, 若为’d'则为子目录 + +grep过 ...

  7. WebSite和WebApplication的区别

    1. WebApplication(Web应用程序)和WebSite(网站)的区别:WebSite是为了兼容从ASP转过来的开发人员的习惯而存在的,用起来简单,例如:不需要创建命名控件.C#代码修改以 ...

  8. c/c++指针总结[pointer summary]

    [本文链接] http://www.cnblogs.com/hellogiser/p/pointer-summary.html 1.指针注意事项 (1). 指针类型字符串不容许修改 char *str ...

  9. msysgit ls 中文显示

    2013年10月17日 14:54:15 安装了新版的msysgit后,在其自带的 git bash 命令行下就可以输入中文汉字了 但是创建了中文名字命名的文件后,再用 ls 命令查询时会出现乱码的情 ...

  10. Java for LeetCode 160 Intersection of Two Linked Lists

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...