2015 多校联赛 ——HDU5389(dp)
2015-08-14 11:28
274 查看
[align=left]Sample Input[/align]
4
3 9 1
1 2 6
3 9 1
2 3 3
5 2 3
1 1 1 1 1
9 9 9
1 2 3 4 5 6 7 8 9
Sample Output
1
0
10
60
题意:
已知有两个门,要求将人分为两组,两组的“和”分别等于两个门的数字,当然也可以全部进入一个门
思路:(NeverMoreH)
如果能找到满足题意的解,一定满足a和b的和等于n个人的标号的和,所以我们只需要判断n个人的标号组成a的情况有多少(或者只判断b,一样),同时还要注意可以把n个人都分给a,或者都分给b,这样也是满足的。(果然还是缺乏经验- -,想不到方法)
4
3 9 1
1 2 6
3 9 1
2 3 3
5 2 3
1 1 1 1 1
9 9 9
1 2 3 4 5 6 7 8 9
Sample Output
1
0
10
60
题意:
已知有两个门,要求将人分为两组,两组的“和”分别等于两个门的数字,当然也可以全部进入一个门
思路:(NeverMoreH)
如果能找到满足题意的解,一定满足a和b的和等于n个人的标号的和,所以我们只需要判断n个人的标号组成a的情况有多少(或者只判断b,一样),同时还要注意可以把n个人都分给a,或者都分给b,这样也是满足的。(果然还是缺乏经验- -,想不到方法)
#include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; #define N 500010 #define mod 258280327 int q[100050]; int dp[100005][10]; int Sum(int x,int y) { int temp = x + y; int ans = temp % 9; if(ans == 0) return 9; return ans; } int main() { int T,n,a,b; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&a,&b); int sum = 0; for(int i = 1; i <= n ; i++) { scanf("%d",&q[i]); sum = Sum(sum,q[i]); } memset(dp,0,sizeof(dp)); dp[0][0] = 1; for(int i = 1; i <= n; i++) for(int j = 0; j <= 9; j++) { dp[i][j]+=dp[i-1][j]; dp[i][Sum(j,q[i])] +=dp[i-1][j]; dp[i][j] %= mod; dp[i][Sum(j,q[i])] %= mod; } int ans = 0; ans = (ans+dp [a]) * (Sum(a,b) == sum); if(sum == a && ans == 0) ans++; if(sum == b) ans++; printf("%d\n",ans); } return 0; }
相关文章推荐
- tomcat 8 catalina.out 中文乱码问题解决
- 孤儿进程
- 注解 @Resource
- 2015 多校联赛 ——HDU5389(dp)
- 程序小工具类方面的url收藏
- jquery disable按钮(启用、禁用按钮)
- C++中声明与定义的区别
- 如何组织召开项目的评审会议
- hdu 1711 Number Sequence(kmp找子串第一次出现的位置)
- C#中加粗label的字体
- Emacs 使用graphviz-dot-mode创建架构图
- Elections
- 高级组件之进度条
- 欢迎使用CSDN-markdown编辑器
- JavaScript实现给按钮加上双重动作的方法
- Leetcode 208 Implement Trie (Prefix Tree) 实现字典树 (前缀字典树)
- vs2010 程序语句有错,也报错了 却运行了以前的版本,怎么设置它有错就不要运行了呢?
- LNK1169: one or more multiply defined symbols found
- 构建千万级web访问架构
- poj 2503 Babelfish