zoukankan      html  css  js  c++  java
  • HDU 1231 最大连续子序列 --- 入门DP

      HDU 1231

      题目大意以及解题思路见: HDU 1003题解,此题和HDU 1003只是记录的信息不同,处理完全相同。

    /* HDU 1231 最大连续子序列 --- 入门DP */
    #include <cstdio>
    #include <cstring>
    
    int dp[10005];
    
    int main()
    {
    #ifdef _LOCAL
        freopen("D:\input.txt", "r", stdin);
    #endif
        int n;
        int maxSum, fst, lst;
        int start, ai;    //start用于记录起始位置,ai表示a[i],这样可以省去一个数组
        while (scanf("%d", &n) == 1 && n){
            for (int i = 0; i < n; ++i){
                scanf("%d", dp + i);
            }//for(i)
    
            start = lst = fst = maxSum = dp[0];
            for (int i = 1; i < n; ++i){
                ai = dp[i];
                if (dp[i - 1] >= 0){
                    dp[i] = dp[i - 1] + dp[i];
                }
                else{
                    start = dp[i];
                }
    
                if (dp[i] > maxSum){
                    maxSum = dp[i];
                    fst = start;
                    lst = ai;//这是dp[i]已经更新了,不再是原来的a[i],因此需要提前记录下来
                }
            }//for(i)
            if (maxSum < 0){
                printf("0 %d %d
    ", dp[0], dp[n - 1]);
            }
            else{
                printf("%d %d %d
    ", maxSum, fst, lst);
            }
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    Java程序员从笨鸟到菜鸟全部博客目录
    Problem I
    Problem I
    Problem S
    Problem S
    Problem X
    Problem X
    Problem Q
    Problem Q
    Ellipse
  • 原文地址:https://www.cnblogs.com/tommychok/p/5199678.html
Copyright © 2011-2022 走看看