poj1742 - Coins

来源:互联网 发布:淘宝催付款俏皮用语 编辑:程序博客网 时间:2024/05/16 15:34

                                    想看更多的解题报告:http://blog.csdn.net/wangjian8006/article/details/7870410
                                     转载请注明出处:
http://blog.csdn.net/wangjian8006

题目大意:有n种硬币,这n种硬币的价值为a[i],第i种硬币的个数为c[i]个,问有多少种方案,使这些硬币加起来等于m
这是一个很裸的多重背包可行性问题

#include<iostream>using namespace std;#define MAXV 105#define MAXM 100005int weight[MAXV],c[MAXV],f[MAXM],user[MAXM];int main(){int i,j,n,m,ans;while(scanf("%d%d",&n,&m) && n && m){for(i=1;i<=n;i++)scanf("%d",&weight[i]);for(i=1;i<=n;i++)scanf("%d",&c[i]);memset(f,0,sizeof(f));f[0]=1;ans=0;for(i=1;i<=n;i++){memset(user,0,sizeof(user));for(j=weight[i];j<=m;j++){if(!f[j] && f[j-weight[i]] && user[j-weight[i]]+1<=c[i]){f[j]=1;user[j]=user[j-weight[i]]+1;ans++;}}}printf("%d\n",ans);}return 0;}


 

原创粉丝点击