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\n",s);
32 break;
33 }
34 }
35 }
36 return 0;
37 }
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\n",s);
32 break;
33 }
34 }
35 }
36 return 0;
37 }