可能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(" "); } return 0; }