zoukankan      html  css  js  c++  java
  • HDU 1003 Max Sum (dp)

    Problem Description

    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.
     
    Input
    The 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).
     
    Output
    For 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
    2
    5 6 -1 5 4 -7
    7 0 6 -1 1 -6 7 -5
     
    Sample Output
    Case 1: 14 1 4
    Case 2: 7 1 6
     
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 using namespace std;
     5 int main(){
     6     int t,n,a[100010],cnt=1,dp[100010];
     7     scanf("%d",&t);
     8     int q=t;
     9     while(t--){
    10         scanf("%d",&n);
    11         memset(dp,0,sizeof(dp));
    12         for(int i=1;i<=n;i++){
    13             scanf("%d",&a[i]);
    14             dp[i]=a[i];
    15         }
    16         int maxx=dp[1];
    17         int t=1;
    18         for(int i=1;i<=n;i++){
    19             dp[i]=max(dp[i],dp[i-1]+a[i]);
    20             if(dp[i]>maxx){
    21                 maxx=dp[i];
    22                 t=i; //记录最长子序列的末位置 
    23             }
    24         }
    25         int sum=0,tt;
    26         for(int i=t;i>=1;i--){
    27             sum+=a[i];
    28             if(sum==maxx){ //找最长子序列的初始位置 
    29                 tt=i;
    30             }
    31         }
    32         printf("Case %d:
    ",cnt++);
    33         printf("%d %d %d
    ",maxx,tt,t);
    34         if(q!=(cnt-1))
    35             printf("
    ");
    36     }
    37 } 
  • 相关阅读:
    连载一:RobotFramework+SeleniumWebdriver+RIDE的安装
    一个小小黑点乱了我的芳心
    JDK的环境配置
    Eclipse中安装TestNG插件
    RobotFramework的安装
    导入现有java工程
    eclipse创建项目(步骤加图片)
    java--算术运算符
    java--数据类型
    java程序结构--day01
  • 原文地址:https://www.cnblogs.com/cake-lover-77/p/10197474.html
Copyright © 2011-2022 走看看