标签:blog os io for 2014 amp log ios
先将前n-1个从小到大排序,对m-5进行01背包,然后答案就是m-dp[m-5]-a[n-1]
至于为什么最后减去最贵的菜品,而不是把最贵的菜品也放到01背包里呢,
因为如果可以把最贵菜品a[n-1]可以放到背包里,那么其他菜品a[i]也一定可以放在背包里(背包的容量为m-5),最后都是减去a[i]+a[n-1],所以可以吧最贵的菜品不放入背包,直接最后减去
#include<iostream> #include<stdio.h> #include<algorithm> using namespace std; #define N 1005 int a[N],dp[N]; int main(){ int n,m; while(cin>>n,n){ for(int i=0;i<n;i++){ scanf("%d",&a[i]); } cin>>m; int s=m-5; if(s<0){ printf("%d\n",m); continue; } sort(a,a+n); for(int i=0;i<=m;i++) dp[i]=0; for(int i=0;i<n-1;i++){ for(int j=s;j>=a[i];j--) dp[j]=max(dp[j-a[i]]+a[i],dp[j]); } printf("%d\n",m-dp[s]-a[n-1]); } }
hdu 2546 饭卡 01背包,布布扣,bubuko.com
标签:blog os io for 2014 amp log ios
原文地址:http://blog.csdn.net/youngyangyang04/article/details/38313315