题目:
这个题也是一个简单地背包问题,只需要把价格看成既是价值又是质量就可以了。
另外,要注意的是应该先判断余额是不是小于五。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
main()
{
int f[1010];
int i;
int m[1010],w[1010];
int t;
int n,V,v;
int sum;
while(scanf("%d",&n)&&n!=0)
{
memset(f,0,sizeof(f));
for(i=0;i<n;i++)
{
scanf("%d",&w[i]);
m[i]=w[i];
}
scanf("%d",&V);
sort(m,m+n);
sort(w,w+n);
for(i=0;i<n-1;i++)
{
for(v=V-5;v>=m[i];v--)
{
if(f[v]<f[v-m[i]]+w[i])
f[v]=f[v-m[i]]+w[i];
}
}
sum=V-f[V-5];
sum=sum-m[n-1];
if(V<5)
{
sum=V;
}
printf("%d\n",sum);
}
}