hdu 2546 饭卡
题目描述:...
分析:因为只要剩余金额大于5肯定会支付成功,那么最优的办法肯定是要用最后的钱去买最贵的。只需要对除了最贵的物品之外的物品进行背包就可以。其中背包的容量是原来的减5
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #define N 1010 5 using namespace std; 6 int dp[N],w[N]; 7 int main(){ 8 int n,m; 9 while(cin>>n){ 10 if(!n)return 0; 11 for(int i=1;i<=n;i++)cin>>w[i]; 12 cin>>m; 13 sort(w+1,w+1+n); 14 memset(dp,0,sizeof(dp)); 15 if(m<5){ 16 cout<<m<<endl; 17 continue; 18 } 19 m-=5; 20 for(int i=1;i<n;i++) 21 for(int j=m;j>=w[i];j--) 22 dp[j]=max(dp[j],dp[j-w[i]]+w[i]); 23 cout<<(m+5)-(dp[m]+w[n])<<endl; 24 } 25 return 0; 26 }