题意:传送门
题解:这个题非常好想,我先留上5块钱买最贵的,然后剩下的钱从剩下的东西买出价值最大的,最后随便导下就出来了。
附上代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+50;
const int maxc=1e3+50;
int v[maxn];
int dp[maxc];
int main()
{
int n,m;
while(scanf("%d",&n)!=EOF){
if(n==0){
break;
}else{
for(int i=1;i<=n;i++){
scanf("%d",&v[i]);
}
scanf("%d",&m);
if(m<5){
printf("%d\n",m);
continue;
}
sort(v+1,v+n+1);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n-1;i++){
for(int j=m-5;j>=v[i];j--){
dp[j]=max(dp[j],dp[j-v[i]]+v[i]);
}
}
int ans=5-v[n]+m-5-dp[m-5];
printf("%d\n",ans);
}
}
return 0;
}