您的位置:首页 > 其它

acm pku 2479解题报告

2009-01-11 17:47 211 查看
这是一个动态规划的题目。可以使用双DP。输入的时候可以使用一次DP。求出最大值。然后从后往前进行一次DP求出最大值就可以了。时间复杂度为O(N)。
具体代码实现如下:#include<iostream>
using namespace std;
int temp[50000],num[50000];
const int MIN = -100000;
int main()
{
int test,n;
int tmp,ans,sum;
scanf("%d",&test);
while(test--)
{
scanf("%d",&n);
tmp = MIN;
sum = 0;
for(int i=1;i<=n;i++)//第一次DP
{
scanf("%d",&num[i]);
sum += num[i];
if(sum>tmp)
tmp = sum;
temp[i] = tmp;
if(sum<0) sum = 0;
}
tmp = ans = MIN;
sum = 0;
for(int i=n;i>1;i--)//第二次DP
{
sum += num[i];
if(sum>tmp) tmp = sum;
if(ans<(temp[i-1]+tmp))
ans = temp[i-1]+tmp;
if(sum<0) sum = 0;
}
cout << ans << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: