hdu2546饭卡-01背包

来源:互联网 发布:万网域名怎么转出 编辑:程序博客网 时间:2024/04/20 16:58

        当卡上的金额大于等于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;}