hdoj 2566 统计硬币
2014-08-12 19:59
393 查看
统计硬币
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3846 Accepted Submission(s): 2695
[align=left]Problem Description[/align]
假设一堆由1分、2分、5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0)。
[align=left]Input[/align]
输入数据第一行有一个正整数T,表示有T组测试数据;
接下来的T行,每行有两个数n,m,n和m的含义同上。
[align=left]Output[/align]
对于每组测试数据,请输出可能的组合方式数;
每组输出占一行。
[align=left]Sample Input[/align]
2
3 5
4 8
[align=left]Sample Output[/align]
1
2
AC CODE:
#1:非母函数法
#include<stdio.h> //int c1[1000],c2[1000]; int main() { int t; scanf("%d",&t); while(t--) { int m,n; scanf("%d%d",&n,&m); int i,j,k,sum,temp=0; for(i=0;i<=n;i++) for(j=0;j<=n-i;j++) for(k=0;k<=n-i-j;k++) { if(i+k+j!=n) continue; sum=i+2*j+5*k; if(sum==m) temp++; } printf("%d\n",temp); } return 0; }
#2:母函数法
#include<stdio.h> #include<string.h> int c1[100][100],c2[100][100]; int main() { int i,j,k,l,n,m,t; scanf("%d",&t); while(t--) { int sum=0; scanf("%d%d",&n,&m); memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for(i=0;i<=n;i++) { c1[i][i]=1; } for(i=2;i<=5;i+=3) { for(j=0;j<=m;j++) for(k=0;k*i+j<=m&&k<=n;k++) { for(l=0;l+k<=n;l++) c2[k*i+j][k+l]+=c1[j][l]; } for(j=0;j<=m;j++) { for(k=0;k<=n;k++) { c1[j][k]=c2[j][k]; c2[j][k]=0; } } } printf("%d\n",c1[m] ); } return 0; }
相关文章推荐
- HDOJ 2566 统计硬币 (水)
- hdoj-2566-统计硬币(解题报告)
- HDOJ/HDU 2566 统计硬币(公式~遍历~)
- HDOJ/HDU 2566 统计硬币(公式~遍历~)
- HDU 2566.统计硬币
- hdu 2566统计硬币
- HDU--2566统计硬币【水题】
- hdu 2566 统计硬币 dfs 不能排除组合重复的情况 代码不完整
- hdu-2566-统计硬币
- hdu 2566 统计硬币
- HDOJ&nbsp;2566&nbsp;&nbsp;&nbsp;统计硬币
- hdu 2566 统计硬币
- hdu 2566 统计硬币 数学解法
- HDU - 2566 统计硬币(常数时间解法)
- HDU 2566 统计硬币。
- HDU 2566 统计硬币
- hdu 2566统计硬币
- hdu 2566 统计硬币
- 杭电2566_统计硬币——java
- 2566:硬币统计