zoj 3657

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 
 6 using namespace std;
 7 
 8 int n;
 9 int sum,w[15];
10 int rest[151];
11 
12 int main()
13 {
14     while(scanf("%d",&n) != EOF)
15     {
16         sum=0;
17         int re=0,tag=0;
18         memset(rest,0,sizeof(rest));
19         for(int i=0;i<n;i++)
20         {
21             scanf("%d",&w[i]);
22             sum+=w[i];
23         }
24         sort(w,w+n);
25         switch(n)
26         {
27             case 0:
28             case 1:
29             case 2:
30             case 3:
31                 puts("1024");
32                 break;
33             case 4:
34                 for(int i=0;i<=1 && !tag;i++)
35                     for(int j=i+1;j<=2 && !tag;j++)
36                         for(int k=j+1;k<=3 && !tag;k++)
37                             if((w[i]+w[j]+w[k])%1024==0)//很奇怪这里写成    if((w[i]+w[j]+w[k])&&(w[i]+w[j]+w[k])%1024==0)会wa。。难道 4 0 0 0 0精灵也让过?
38                                 tag=1;
39                 if(tag)
40                     puts("1024");
41                 else
42                 {
43                     for(int i=0;i<=2;i++)
44                         for(int j=i+1;j<=3;j++)
45                             rest[re++]=sum-w[i]-w[j];
46                     for(int i=0;i<re;i++)
47                         rest[i]=(rest[i]-1)%1024+1;
48                     sort(rest,rest+re);
49                     printf("%d\n",rest[re-1]);
50                 }
51                 break;
52             case 5:
53                 for(int i=0;i<=2 && !tag;i++)
54                     for(int j=i+1;j<=3 && !tag;j++)
55                         for(int k=j+1;k<=4 && !tag;k++)
56                             if((w[i]+w[j]+w[k])%1024==0)
57                             {
58                                 tag=1;
59                                 rest[re++]=sum-w[i]-w[j]-w[k];
60                             }
61                 if(!tag)
62                     puts("0");
63                 else
64                 {
65                     for(int i=0;i<re;i++)
66                         rest[i]=(rest[i]-1)%1024+1;
67                     sort(rest,rest+re);
68                     printf("%d\n",rest[re-1]);
69 
70                 }
71                 break;
72         }
73     }
74     return 0;
75 }
原文地址:https://www.cnblogs.com/Missa/p/2723401.html