01背包—— hdu2546 饭卡

来源:互联网 发布:进口食品js号 编辑:程序博客网 时间:2024/06/04 19:29

中文题,然后这个题就是模板上变了一点点。若钱不够5元的话,直接输出。够五元的话,先拿出5元去买最贵的,然后其他n-1个物品按照01背包来做

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define maxn 1005int n,v;int p[maxn];int dp[maxn][maxn];void dp1(){    for(int i=n-1;i>=0;i--)    for(int j=0;j<=v-5;j++){            if(j>=p[i])            dp[i][j]=max(dp[i+1][j],dp[i+1][j-p[i]]+p[i]);           else dp[i][j]=dp[i+1][j];    }    printf("%d\n",v-dp[0][v-5]-p[n]);}int main(){    while(scanf("%d",&n)!=EOF&&n){            memset(p,0,sizeof(p));            for(int i=1;i<=n;i++)                scanf("%d",&p[i]);            sort(p+1,p+n+1);            scanf("%d",&v);            memset(dp,0,sizeof(dp));             if(v<5) printf("%d\n",v);            else dp1();    }    return 0;}
0 0
原创粉丝点击