HDU 2546 饭卡

题解:贪心思想,去除一个最大值,背包容量减5,直接01背包即可。

#include <iostream>  
#include <cstdio>  
#include <algorithm>  
using namespace std;  
int main()  
{  
    int n,m;  
    while(scanf("%d",&n),n!=0){       
        int a[1005];  
        memset(a,0,sizeof(a));  
        for(int i=1;i<=n;i++)  
            scanf("%d",&a[i]);  
        sort(a+1,a+n+1);    
        scanf("%d",&m);  
        if(m<5)printf("%d\n",m);  
        else{  
          int f[1005]; 
          memset(f,0,sizeof(f));  
          for(int i=1;i<=n-1;i++)  
            for(int j=m-5;j>=a[i];j--)     
              if(f[j]<f[j-a[i]]+a[i])  
                 f[j]=f[j-a[i]]+a[i];  
         printf("%d\n",m-a[n]-f[m-5]);  
        }         
    }     
    return 0;  
}  

 

posted @ 2014-02-07 13:34  forever97  阅读(140)  评论(0编辑  收藏  举报