hdu 2069 Coin Change(母函数)
2016-04-26 10:25
267 查看
题意:给你50 25 10 5 1硬币各一些 问你组成某个数的不同方案数 但是注意 硬币的个数不超过一百个 所以这题要控制硬币的个数
用二维数组控制
AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespacestd;
inta[10005][105],b[10005][105];
int f[6] ={0,1,5,10,25,50};
int sum[251];
void init()
{
int i1,j1,k1,p1,q1,ans;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
a[0][0] = 1;
for(int i = 1; i <= 5; i++)
{
for(int j = 0; j <= 250; j++)
for(int k = 0;k*f[i]+j<=250; k++)
for(int p = 0; k+p<=100;p++) ///用来控制个数
b[k*f[i]+j][k+p] += a[j][p];
for(int j = 0; j <= 250; j++)
for(int p = 0; p <= 100;p++)
{
a[j][p] = b[j][p];
b[j][p] = 0;
}
}
sum[0] = 1;
for(int i = 1; i <= 250; i++)
for(int j = 0; j <= 100; j++)
sum[i]+=a[i][j];
}
int main()
{
int t;
init();
while(~scanf("%d",&t))
{
printf("%d\n",sum[t]);
}
return 0;
}
用二维数组控制
AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespacestd;
inta[10005][105],b[10005][105];
int f[6] ={0,1,5,10,25,50};
int sum[251];
void init()
{
int i1,j1,k1,p1,q1,ans;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
a[0][0] = 1;
for(int i = 1; i <= 5; i++)
{
for(int j = 0; j <= 250; j++)
for(int k = 0;k*f[i]+j<=250; k++)
for(int p = 0; k+p<=100;p++) ///用来控制个数
b[k*f[i]+j][k+p] += a[j][p];
for(int j = 0; j <= 250; j++)
for(int p = 0; p <= 100;p++)
{
a[j][p] = b[j][p];
b[j][p] = 0;
}
}
sum[0] = 1;
for(int i = 1; i <= 250; i++)
for(int j = 0; j <= 100; j++)
sum[i]+=a[i][j];
}
int main()
{
int t;
init();
while(~scanf("%d",&t))
{
printf("%d\n",sum[t]);
}
return 0;
}
相关文章推荐
- ACM常用算法
- 母函数 多项式相乘求系数(HDU 1028)
- 母函数简单应用_hdu_2189
- 母函数
- 母函数
- hdu 1085
- hdu1028 母函数
- hdu 1085母函数的应用
- hdu 1085母函数的应用
- Square Coins
- Big Event in HDU(多重背包或母函数)
- Holding Bin-Laden Captive!(母函数或多重背包)
- Ignatius and the Princess III(母函数或动态规划)
- hdu 1398 (母函数)
- HDU 1028 Ignatius and the Princess III(母函数)
- hdu 1398 Square Coins(母函数)
- HDU 1709 The Balance【特殊母函数】
- HDU 2082 找单词【母函数】
- hdoj 2566 统计硬币
- Hdu 2079 (母函数应用)