1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorithm> 6 #include <queue> 7 #include <stack> 8 #include <vector> 9 using namespace std; 10 int dp[1005]; 11 int main(int argc, char *argv[]) 12 { 13 int n,w[1010],m; 14 while(scanf("%d",&n)!=EOF) 15 { 16 if(n==0) 17 break; 18 for(int i=0;i<n;i++) 19 scanf("%d",&w[i]); 20 scanf("%d",&m); 21 if(m<5) 22 { 23 printf("%d\n",m); 24 continue; 25 } 26 27 memset(dp,0,sizeof(dp)); 28 sort(w,w+n); 29 m-=5; 30 for(int i=0;i<n-1;i++) 31 for(int j=m;j>=w[i];j--) 32 dp[j]=max(dp[j],dp[j-w[i]]+w[i]); 33 printf("%d\n",m-dp[m]+5-w[n-1]); 34 } 35 return 0; 36 }
HDOJ 2546(01背包)
猜你喜欢
转载自www.cnblogs.com/huluxin/p/9656407.html
今日推荐
周排行