HDU1231 最大连续子序列

来源:互联网 发布:java代码换行符 编辑:程序博客网 时间:2024/06/05 04:21

题目链接

代码如下:

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#define mem(a, b) memset(a, b, sizeof(a))using namespace std;int dp[10005], num[10005];int main(){    int n, ans, tmp;    while(~scanf("%d", &n) && n)    {        bool flag = 0;        mem(dp, 0);        for(int i = 0; i < n; i++)        {            scanf("%d", &num[i]);            if(num[i] >= 0)                flag = 1;        }        if(!flag)        {            printf("0 %d %d\n", num[0], num[n - 1]);            continue;        }        dp[0] = num[0];        ans = num[0];        tmp = 0;        for(int i = 1; i < n; i++)        {            dp[i] = max(dp[i - 1] + num[i], num[i]);            if(ans < dp[i])                ans = dp[i], tmp = i;        }        int ans1 = num[tmp], ans2 = num[tmp];        for(int i = tmp - 1;i >= 0;i--)        {            if(dp[i] == dp[i + 1] - num[i + 1])                ans1 = num[i];            else                break;        }        printf("%d %d %d\n", ans, ans1, ans2);    }    return 0;}


0 0
原创粉丝点击