codevs 1392 合並傻子
阿新 • • 發佈:2017-05-06
none ems through 範圍 idt pac 脫殼 wrap tro
else if m<RPn 鐘某人很擔心,因為他必然由此變成一個沙茶,這時他要說:‘I am..Sha...X’(以便提升RP)
else 鐘某人仍然擔心自己可能成為一個沙茶,所以他要金蟬脫殼說:‘I will go to play WarIII’ 輸入描述 Input Description
輸出描述
Output Description
4 4 5 9
樣例輸出
Sample Output
1392 合並傻子
時間限制: 1 s 空間限制: 128000 KB 題目等級 : 鉆石 Diamond 題目描述 Description
在一個園形操場的四周站著N個傻子,現要將傻子有次序地合並成一堆.規定每次只能選相鄰的2個傻子合並成新的一個傻子,並將新的一個傻子的RP數,記為該次合並的RP數。
將N個傻子合並成1個的最小RP數為RPn和最大RP數為RPx.
鐘某人要合並他們,鐘某人現在的RP為m,但是他要小心....
if m>RPx then 鐘某人能很輕松的合並他們,並說出 ‘It is easy’
else 鐘某人仍然擔心自己可能成為一個沙茶,所以他要金蟬脫殼說:‘I will go to play WarIII’ 輸入描述 Input Description
數據的第1行試正整數n和m(1≤N≤100,m在longint範圍之內)表示有N個傻子.第2行有N個數,分別表示合並每個傻子的所掉的RP數
輸出文件僅一行包含一個句子表示鐘某人說的話。
樣例輸入 Sample Input4 -9999
I am..Sha...X
數據範圍及提示 Data Size & Hint出題人不告訴你是1S
鐘某人不是zhx??
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int n,m,x,a[1001],fmax[1001][1001],fmin[1001][1001]; 6 int maxx=-999999999,minn=999999999; 7 8 int main() { 9 scanf("%d%d",&n,&m); 10 memset(fmin,127,sizeof(fmin)); 11 for(int i=1; i<=n*2; i++) fmin[i][i]=0; 12 for(int i=1; i<=n; i++) { 13 scanf("%d",&x); 14 a[i]=a[i-1]+x; 15 } 16 for(int i=n+1; i<=2*n-1; i++) a[i]=a[i-n]+a[n]; 17 for(int l=1; l<=n; l++) 18 for(int i=1; i<=n-l; i++) 19 { 20 int j=l+i; 21 for(int k=i; k<j; k++) 22 { 23 fmax[i][j]=max(fmax[i][j],fmax[i][k]+fmax[k+1][j]+a[j]-a[i-1]); 24 fmin[i][j]=min(fmin[i][j],fmin[i][k]+fmin[k+1][j]+a[j]-a[i-1]); 25 } 26 } 27 for(int i=1; i<=n; i++) { 28 if(minn>fmin[i][i+n-1]) minn=fmin[i][i+n-1]; 29 if(maxx<fmax[i][i+n-1]) maxx=fmax[i][i+n-1]; 30 } 31 32 if(m>maxx) printf("It is easy\n"); 33 else if(m<minn) printf("I am..Sha...X\n"); 34 else printf("I will go to play WarIII\n"); 35 return 0; 36 }
codevs 1392 合並傻子