poj 3181 Dollar Dayz(求组成方案的背包+大数)

时间:2021-07-13 01:19:07

可能nyist看见加的背包专题我老去凑热闹,觉得太便宜我了。他们新加的搜索专题居然有密码。

都是兄弟院校嘛!何必那么小气。

回到正题,跟我写的上一篇关于求组成方案的背包思路基本一样,无非就是一个二维费用的背包换成了完全背包。如果说题目有什么亮点的话,那就是大数了。第一遍写的时候瞎了我的狗眼竟然没注意到,我的1A就这么没了。

关于组成方案的叙述,还是看我之前那篇结题报告吧:关于背包组成方案的讨论

#include<stdio.h>
#include<string.h>
#define N 1005
int dp[N][N];
int flag[N];
int i,j;
void Add(int x)
{
int i;
int as=0;
flag[j]=flag[j]>flag[x]?flag[j]:flag[x];
for(i=0;i<flag[j];i++)
{
dp[j][i]=dp[j][i]+dp[x][i]+as;
as=0;
if(dp[j][i]>=10)
{
as=1;
dp[j][i]%=10;
}
}
if(as)
{
flag[j]++;
dp[j][i]=1;
}
return ;
} int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(dp,0,sizeof(dp));
memset(flag,0,sizeof(flag));
dp[0][0]=1;
flag[0]=1;
for(i=1;i<=m;i++)
{
for(j=i;j<=n;j++)
{
int x;
x=j-i;
Add(x);
}
}
for(i=flag[n]-1;i>=0;i--)
printf("%d",dp[n][i]);
printf("\n");
}
return 0;
}