tyvj p1214硬币问题(完全背包)

来源:互联网 发布:网络丢包率高怎么办 编辑:程序博客网 时间:2024/06/10 06:38
硬币问题       描述 Description   有n种硬币,面值为别为a[1],a[2],a[3]……a[n],每种都有无限多。给定非负整数s,可以选取多少个硬币使得面值和恰好为s?输出硬币数目最小值和最大值       输入格式 Input Format  第1行n
第2行s
第3到n+2行为n种不同的面值       输出格式 Output Format  第1行为最小值
第2行为最大值  样例输入 Sample Input [复制数据]     

 

 

 

 

样例输出 Sample Output [复制数据]

 

 

 

f[v]表示用v个硬币装满s,f[v]=min(f[v-a[i]])+1,特别注意初始化……

 

#include <iostream>using namespace std;int da[10005],d[10005],a[105];int main(){int n,s,i,j;while(cin>>n){cin>>s;for(i=1;i<=n;i++)cin>>a[i];for(i=0;i<=s;i++){da[i]=-100010;d[i]=100010;}d[0]=da[0]=0;for(j=0;j<=s;j++)for(i=1;i<=n;i++)  if(j>=a[i]) {d[j]=min(d[j],d[j-a[i]]+1);da[j]=max(da[j],da[j-a[i]]+1);}cout<<d[s]<<endl<<da[s]<<endl;}return 0;}