Max sum Time limit:1000 ms Memory limit:32768kb this problem will be judged on HDU. Original ID: 1003
64-bit integer Io format:
% I64dJava class name:
Main
Given a sequence a [1], a [2], a [3] ...... A [n], your job is to calculate the max sum of a sub-sequence. for example, given (6,-1, 5, 4,-7), the Max sum in this sequence is 6 + (-1) + 5 + 4 = 14.
Inputthe first line of the input contains an integer T (1 <= T <= 20) which means the number of test cases. then T lines follow, each line starts with a number N (1 <= n <= 100000), then n integers followed (all the integers are between-1000 and 1000 ).
Outputfor each test case, you should output two lines. the first line is "case #:", # means the number of the test case. the second line contains three integers, the max sum in the sequence, the start position of the sub-sequence, the end position of the sub-sequence. if there are more than one result, output the first one. output a blank line between two cases.
Sample Input
25 6 -1 5 4 -77 0 6 -1 1 -6 7 -5
Sample output
Case 1 4 case 1 6
Problem solving: DP beginners! The path to growth of weak food!
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <vector> 6 #include <climits> 7 #include <algorithm> 8 #include <cmath> 9 #define LL long long10 using namespace std;11 int dp[100010],num[100010];12 int main(){13 int kase,i,index,ans,n,k = 1;14 scanf("%d",&kase);15 while(kase--){16 scanf("%d",&n);17 for(i = 1; i <= n; i++)18 scanf("%d",dp+i);19 num[1] = 0;20 ans = dp[index = 1];21 for(i = 2; i <= n; i++){22 if(dp[i] <= dp[i-1]+dp[i]){23 dp[i] = dp[i-1]+dp[i];24 num[i] = num[i-1]+1;25 }else num[i] = 0;26 if(ans < dp[i]) ans = dp[index = i];27 }28 printf("Case %d:\n",k++);29 printf("%d %d %d\n",ans,index-num[index],index);30 if(kase) putchar(‘\n‘);31 }32 return 0;33 }View code