小于等于3 的时候就是1024 4的时候 讨论 5的时候讨论 注意重量为0的情况
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<cmath> 7 using namespace std; 8 int a[10]; 9 int n; 10 int main() 11 { 12 int i,j,g; 13 while(scanf("%d",&n)!=EOF) 14 { 15 int sum=0; 16 for(i = 1; i <= n ; i++) 17 { 18 scanf("%d",&a[i]); 19 sum+=a[i]; 20 } 21 if(n<=3) 22 { 23 printf("1024 "); 24 continue; 25 } 26 else 27 { 28 if(n==4) 29 { 30 int flag = 0; 31 for(i = 1; i <= n ; i++) 32 { 33 int s1 = 0; 34 for(j = 1 ; j <= n ; j++) 35 if(j!=i) 36 s1+=a[j]; 37 if(s1%1024==0) 38 { 39 flag = 1; 40 break; 41 } 42 } 43 int maxz=0; 44 for(i = 1; i <= n ; i++) 45 for(j = 1; j <= n ; j++) 46 { 47 if(j!=i) 48 { 49 if(a[i]+a[j]) 50 { 51 if((a[i]+a[j])%1024==0) 52 maxz = 1024; 53 else 54 maxz = max(maxz,(a[i]+a[j])%1024); 55 } 56 } 57 } 58 if(flag) 59 printf("1024 "); 60 else 61 printf("%d ",maxz); 62 } 63 else 64 { 65 int maxz = 0; 66 for(g = 1; g <= n ; g++) 67 { 68 for(i = 1; i <= n ; i++) 69 { 70 if(i==g) continue; 71 int s1 = 0; 72 for(j = 1 ; j <= n ; j++) 73 if(j!=i&&j!=g) 74 s1+=a[j]; 75 if(s1%1024==0) 76 { 77 if((sum-s1)&&(sum-s1)%1024==0) 78 maxz = 1024; 79 else 80 maxz = max(maxz,(sum-s1)%1024); 81 } 82 } 83 } 84 printf("%d ",maxz); 85 } 86 } 87 } 88 return 0; 89 }