Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我用的是最大子段和 DP 还是WA 不知道错哪里了/* name: Maximum sum author: Y_zou time: 2005_8_21 */ #include <iostream> #include <cstdio> using namespace std; int arrayB[50001]; int arrayC[50001]; int MaxSum(int cnt,int* buff) { if(cnt<2) return 0; arrayB[0] = 0; arrayC[1] = 0; for(int i=1;i <= 2; i++) { arrayB[i] = arrayB[i-1] + buff[i]; arrayC[i-1] = arrayB[i]; int max = arrayB[i]; for(int j=i+1; j<=i+cnt-2; j++) { arrayB[j] = arrayB[j-1] > arrayC[j-1] ? arrayB[j-1]+ buff[j] : arrayC[j-1] + buff[j]; arrayC[j-1] = max; if(max < arrayB[j]) max = arrayB[j]; } arrayC[i+cnt-2] = max; } int sum = 0; for(int c=2; c<=cnt; c++) { if(sum < arrayB[c]) sum = arrayB[c]; } return sum; } int main() { int Case,cnt; int i; int buff[50001]; scanf("%d",&Case); for(int c=0; c <Case; c++) { if(c) cout << endl; scanf("%d", &cnt); for(i=1; i <= cnt; i++) { scanf("%d",&buff[i]); } int sum = 0; if(cnt==2) { sum = buff[1] + buff[2]; if(sum > buff[1] && sum > buff[2]) cout << sum << endl; else { if(buff[1] > buff[2]) cout << buff[1] << endl; else cout << buff[2] << endl; } } else cout << MaxSum(cnt, buff) << endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator