HDU 1003 Max Sum (動規)

來源:互聯網
上載者:User

標籤:des   style   http   java   color   os   

Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 141547    Accepted Submission(s): 32929



Problem DescriptionGiven 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:14 1 4Case 2:7 1 6
 
AuthorIgnatius.L 
RecommendWe have carefully selected several similar problems for you:  1176 1069 2084 1058 1159
此題與HDU 1231一樣,不過簡單一些,記錄前標要容易。
#include <iostream>using namespace std;#define M 100100int vis[M],dp[M];int main(int i,int j,int k){       int n,last,t,first,temp;    cin>>t;    for(k=1;k<=t;k++)    {            cin>>n;        memset(dp,0,sizeof(dp));        for(i=1;i<=n;i++) {cin>>vis[i];dp[i]=vis[i];}        int    sum=0,maxSum=vis[1];first=last=temp=1;        for(i = 1; i <= n; i++)        {            sum += vis[i];          //i是從1開始的,所以先加再判斷。            if(sum > maxSum){                       maxSum = sum;                first = temp;                last = i;            }            if(sum < 0){            //這裡用sum表示vis[first]->vis[i]的和,所以要清零。                sum = 0;                 temp = i+1;            }        }        printf("Case %d:\n",k);        printf("%d %d %d\n",maxSum,first,last);        if(k < t)            printf("\n");  好吧,這裡就讓我格式錯誤了幾次。。。明明Case 1:和Case 2:資料中間有空行,但是完成一次沒空行。。。    }     return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.