1. 程式人生 > >HDU - 4422-The Little Girl who Picks Mushrooms

HDU - 4422-The Little Girl who Picks Mushrooms

pac names pic 兩個 can break hdu tle http

題目鏈接:https://vjudge.net/problem/HDU-4422

題目大意:

自行百度

題目分析:

當n<=3的時候,易得可以得到的最多的蘑菇是1024。

當n>3時,可以進行分類討論。

註意有兩個莫名奇妙的毒點:

1.我用取模WA而用while不斷相減AC

2.三個相加等於零的情況也可以通過

給出代碼:

技術分享
 1 #include <cstdio>
 2 #include <iostream>
 3 #include <string>
 4 #include <set>
 5 #include <cmath>
 6
#include <algorithm> 7 #include <cstring> 8 #include <vector> 9 using namespace std; 10 int num[10]; 11 int main() 12 { 13 int n; 14 while(cin>>n) 15 { 16 int sum=0; 17 for(int i=0;i<n;i++) 18 { 19 scanf("%d",&num[i]); 20 sum+=num[i];
21 } 22 if(n<=3) 23 cout<<1024<<endl; 24 else 25 { 26 if(n==4) 27 { 28 int flag=1; 29 for(int i=0;i<n;i++) 30 { 31 int t=sum-num[i]; 32 if
(t%1024==0) 33 { 34 cout<<1024<<endl; 35 flag=0; 36 break; 37 } 38 } 39 if(flag) 40 { 41 int maxn=0; 42 for(int i=0;i<n;i++) 43 { 44 for(int j=i+1;j<n;j++) 45 { 46 int t=num[i]+num[j]; 47 while(t>1024) 48 t-=1024; 49 maxn=max(maxn,t); 50 } 51 } 52 cout<<maxn<<endl; 53 } 54 } 55 if(n==5) 56 { 57 int maxn=0; 58 for(int i=0;i<n;i++) 59 { 60 for(int j=i+1;j<n;j++) 61 { 62 for(int k=j+1;k<n;k++) 63 { 64 int t=num[i]+num[j]+num[k]; 65 if(t%1024==0) 66 { 67 int tt=sum-t; 68 while(tt>1024) 69 tt-=1024; 70 maxn=max(tt,maxn); 71 } 72 } 73 } 74 } 75 cout<<maxn<<endl; 76 } 77 } 78 } 79 return 0; 80 }
View Code

HDU - 4422-The Little Girl who Picks Mushrooms