首页 > 代码库 > hdu 2546饭卡

hdu 2546饭卡

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int s[1050];
int dp[1050];
int cmp(const void *a,const void * b)
{
   return *(int *)b-*(int *)a; 
}
int maxx(int a,int b)
{return a>b?a:b;}
int main()
{
   int n,i,j,sum,MAX;
   while(~scanf("%d",&n),n)
   {
     memset(dp,0,sizeof(dp));
     for(i=0;i<n;i++)
      scanf("%d",&s[i]);
      qsort(s,n,sizeof(s[0]),cmp);
      MAX=s[0];
     scanf("%d",&sum);
     if(sum<5)
      {
          printf("%d\n",sum);
          continue ;
     }
      sum=sum-5;
     for(i=1;i<n;i++)
        for(j=sum;j>=s[i];j--)
         dp[j]=maxx(dp[j],dp[j-s[i]]+s[i]);
      printf("%d\n",sum-dp[sum]+5-MAX);
                
   } 
   return 0;
}