B

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=101;
 4 const int maxnSum=10005;
 5 bool dp[maxn][maxnSum];
 6 int A[maxn];
 7 
 8 
 9 int main()
10 {
11     int n,sum;
12     while(scanf("%d",&n)!=EOF){
13         sum=0;
14         for(int i=1;i<=n*2;i++){
15             scanf("%d",&A[i]);
16             sum+=A[i];
17         }
18         memset(dp,0,sizeof(dp));
19         dp[0][0]=true;
20         for(int i=1;i<=n*2;i++){
21             for(int j=min(i,n);j>=1;j--){
22                 for(int s=1; s<=sum/2;s++){
23                     if(s>=A[i] && dp[j-1][s-A[i]]){
24                         dp[j][s]=true;
25                     }
26                 }
27             }
28         }
29         for(int s=sum/2;s>=1;--s){
30             if(dp[n][s]){
31                 printf("%d ",s);
32                 break;
33             }
34         }
35     }
36     return 0;
37 }
原文地址:https://www.cnblogs.com/acvc/p/4303961.html