当卡上的金额大于等于5时,可以用5元去买任意价格的菜,所以当然是用这5元去买最贵的菜了,剩下的问题就是,求剩下的m-5元能买到的最高的价值总量。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
int n,m,i,j;
int food[1002],dp[1002];
while(cin>>n&&n)
{
for(int i=0;i<n;i++)
scanf("%d",&food[i]);
cin>>m;
if(m<5)
{
cout<<m<<endl;
continue;
}
else
{
sort(food,food+n);
memset(dp,0,sizeof(dp));
for(i=0;i<n-1;i++)
for(int v=m-5;v>=food[i];v--)
{
dp[v]=max(dp[v],dp[v-food[i]]+food[i]);
}
cout<<m-dp[m-5]-food[n-1]<<endl;
}
}
return 0;
}