HDU 1231 最大连续子序列 动态规划:从新手到专家

HDU 1231 最大连续子序列 

动态规划

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>

using namespace std;

const int inf = 0x3f;
const int INF = 0x3f3f3f3f;
const int maxn = 105;
int n, a[10005], b[10005];  
int main()
{
    
    
    while(scanf("%d", &n) && n)
    {
        for(int i = 0; i < n; i++)
        {
            scanf("%d", &a[i]);
        }

        b[0] = a[0];
        int ans = a[0], s = 0, t = 0, e = 0;
        for(int i = 1; i < n; i++)
        {
            b[i] = max(a[i], a[i]+b[i-1]);

            if(b[i] == a[i])
            {
                t = i;
            }
            //printf("i = %d, %d
", i, b[i]);
            if(b[i] > ans)
            {
                s = t; e = i; ans = b[i];
            }
        }
        if(ans >= 0)
            printf("%d %d %d
", ans, a[s], a[e]);
        else 
            printf("%d %d %d
", 0, a[0], a[n-1]);
    }
    return 0;
}

  

 

动态规划 挺好的 教程