☆硬币问题 | ||
|
样例输入 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;
}