您的位置:首页 > 其它

poj 2479 Maximum sum

2011-06-18 18:12 351 查看
/*
Name:poj 2479 Maximum sum
Author: Unimen
Date: 10/05/11 18:30
Description: DP 最长连续子序列和
*/
/*
解题报告:
1、最大连续子序列和的变形应用
2、该题用一个循环解决,注意其中的技巧
*/
#include <cstdio>
#include <algorithm>
using namespace std;
int nMaxI[2];          //存储以I为终点的最大连续子序列的和
int nMaxBeforeI[2];    //存储到I为终点的最大连续子序列的和有可为包括I也有可能不包括I
int nMaxSum[2];        //存储包括I的两段子序列的和
int t, n, a, i;
int nTotalMax;
int main()
{
while(scanf("%d", &t) != EOF)
{
while(t--)
{
scanf("%d", &n);
scanf("%d", &a);
nMaxI[0] = a;
nMaxBeforeI[0] = a;
scanf("%d", &a);
nMaxI[1] = max(nMaxI[0]+a, a);
nMaxBeforeI[1] = max(nMaxBeforeI[0], nMaxI[1]);
nMaxSum[1] = nMaxI[0] + a;

int nCur = 1;
int nPre = 0;
nTotalMax = nMaxSum[1];
for(i=2; i<n; ++i)
{
nCur = nPre;
nPre = 1 - nPre;
scanf("%d", &a);
nMaxI[nCur] = max(nMaxI[nPre]+a, a);
nMaxBeforeI[nCur] = max(nMaxI[nCur], nMaxBeforeI[nPre]);
nMaxSum[nCur] = max(nMaxBeforeI[nPre]+a, nMaxSum[nPre]+a);
nTotalMax = max(nMaxSum[nCur], nTotalMax);
}
printf("%d/n", nTotalMax);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: