紫书ch9 uva12563

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int maxn = 50+5;
 5 int T,n,t,a[maxn],dp[180*maxn];
 6 
 7 int main(int argc, char const *argv[])
 8 {
 9     scanf("%d",&T);
10     for(int cas=1; cas<=T; cas++){
11         memset(dp,-1,sizeof(dp));
12         dp[0] = 0;
13         scanf("%d%d",&n,&t);
14         for(int i=1; i<=n; i++)
15             scanf("%d",&a[i]);
16         int MAX = 180*n;
17         for(int i=1; i<=n; i++){
18             for(int j=MAX; j>=a[i]; j--){
19                 if(dp[j-a[i]] >= 0)
20                     dp[j] = max(dp[j],dp[j-a[i]]+1);
21             }
22         }
23 
24         int ans = 0,sum = 0;
25         for(int i=0; i<t; i++){
26             if(dp[i]>=ans){
27                 ans = dp[i];
28                 sum = i;
29             }
30         }
31 
32         printf("Case %d: %d %d\n",cas,ans+1,sum+678);
33     }
34 
35     return 0;
36 }
37  

 

posted @ 2016-11-08 15:34  _yxg123  阅读(98)  评论(0编辑  收藏  举报