HDU 2546 01背包问题
Posted 不离别不相遇、
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 2546 01背包问题相关的知识,希望对你有一定的参考价值。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int qq=1000+10; int price[qq<<1],dp[qq<<1]; int main() { int n; while(~scanf("%d",&n)&&n){ memset(price,0,sizeof(price)); //初始化 memset(dp,0,sizeof(price)); for(int i=0;i<n;++i) scanf("%d",&price[i]); sort(price,price+n); int money;scanf("%d",&money); if(money<5){ printf("%d\n",money); continue; } money=money-5; //取出5元用于购买最贵的物品、 for(int j,i=0;i<n-1;++i) for(j=money;j>=price[i];--j) dp[j]=max(dp[j],dp[j-price[i]]+price[i]); //物品只有买或者不买两种选择 printf("%d\n",money+5-dp[money]-price[n-1]); } return 0; }
以上是关于HDU 2546 01背包问题的主要内容,如果未能解决你的问题,请参考以下文章