HDU 5464 Clarke and problem 动态规划
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5464
Clarke and problem
克拉克是一名人格分裂患者。某一天,克拉克分裂成了一个学生,在做题。
突然一道难题难到了克拉克,这道题是这样的:
给你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的答案即可。
1
2 3
1 2
2
有两种方案:什么也不选;全都选。
题解:
dp,01背包,对每个数考虑选和不选两种转移方案,这样就能统计所有的子序列了,然后用取模的方式两降低空间规模。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; typedef long long LL;
const int maxn=;
const int mod=1e9+; int n,q;
int a[maxn];
LL dp[maxn][maxn]; void init(){
memset(dp,,sizeof(dp));
dp[][]=;
} int main(){
int tc;
scanf("%d",&tc);
while(tc--){
init();
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++) scanf("%d",a+i);
for(int i=;i<=n;i++){
for(int j=;j<q;j++){
//不选第i个数
dp[i][j]+=dp[i-][j]; dp[i][j]%=mod;
//选第i个数
dp[i][((j+a[i])%q+q)%q]+=dp[i-][j]; dp[i][((j+a[i])%q+q)%q]%=mod;
}
}
printf("%lld\n",dp[n][]);
}
return ;
}
HDU 5464 Clarke and problem 动态规划的更多相关文章
- hdu 5464 Clarke and problem dp
Clarke and problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php ...
- dp hdu 5464 Clarke and problem
Problem Description Clarke is a patient with multiple personality disorder. One day, Clarke turned i ...
- HDU 5464 ( Clarke and problem ) (dp)
dp[i][j] := 前i个数和为j的情况(mod p) dp[i][j] 分两种情况 1.不选取第i个数 -> dp[i][j] = dp[i-1][j] 2. 选取第i个数 -> ...
- HDU 5464:Clarke and problem
Clarke and problem Accepts: 130 Submissions: 781 Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- HDU 1176 免费馅饼 (动态规划)
HDU 1176 免费馅饼 (动态规划) Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼 ...
- HDU 1074 Doing Homework (动态规划,位运算)
HDU 1074 Doing Homework (动态规划,位运算) Description Ignatius has just come back school from the 30th ACM/ ...
- 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思路差不 ...
- HDU 5832 A water problem(某水题)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- hdu 1402 A * B Problem Plus FFT
/* hdu 1402 A * B Problem Plus FFT 这是我的第二道FFT的题 第一题是完全照着别人的代码敲出来的,也不明白是什么意思 这个代码是在前一题的基础上改的 做完这个题,我才 ...
随机推荐
- 新增时json类型报错
新增时出错:如下 实体类中字段类型没有对应上,vue页面中修改跳转页面的路径:使用params...
- 苹果cms网站漏洞修复解决办法
苹果cms系统,是目前很多电影网站都在使用的一套网站系统,开源,免费,扩展性较好,支持一键采集,伪静态化,高并发的同时承载,获得的很多站长的喜欢,于近日被网站安全检测发现,maccms存在网站漏洞,s ...
- CVE-2018-8174 EXP 0day python
usage: CVE-2018-8174.py [-h] -u URL -o OUTPUT [-i IP] [-p PORT] Exploit for CVE-2018-8174 optional a ...
- 嵌入式Linux系统移植——uboot常用命令
flash的一般分区: 其它数据 环境变量 可执行程序.如bootloader print(可缩写为:pri):打印查看uboot这个软件中集成的环境变量setenv.saveenv:设置.保存环境变 ...
- node.js(二)
今天我们学习如何运行起来一个项目,我还不会新建项目,所以我们打开一个小伙伴创建的项目,我用的开发工具是vscode 选择项目所在文件夹就好了. 打开后是这样子的 我们还要安装一下npm, 在这里安装, ...
- Docker搭建NSQ实时分布式消息集群
NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub.NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行 ...
- 20155227 《Java程序设计》实验四 Android开发基础设计实验报告
20155227 <Java程序设计>实验四 Android开发基础设计实验报告 任务一 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二 ...
- 20155307 《Java程序设计》课堂实践项目数据库
老师我上课没有在规定时间内完成,这是我补交的截图
- # 2017-2018-1 20155336《信息安全技术》实验二——Windows口令破解
2017-2018-1 20155336<信息安全技术>实验二——Windows口令破解 实验原理 口令破解方法 口令破解主要有两种方法:字典破解和暴力破解. 字典破解是指通过破解者对管理 ...
- zabbix最新版3.4搭建(根据官方文档适当修改)
操作系统:CentOS Linux release 7.4.1708 (Core) 1.安装apache 1.1 安装apache yum install httpd httpd-devel 1.2 ...