概述
题目大意:
给定一个数组,求两个不相交的子串的最大和。
思路:正向遍历动规,dp[i] 来存 第i个最大值,然后逆向遍历相加
看代码:
#include <iostream>
using namespace std;
long long n;
int num[100003];
int dp[100003];
int main()
{
int t,ans;
while(cin>>n &&n)
{
t = -1002,ans=0;
for(int i=0; i <n;i++)
{//正向求出最大和
cin>>num[i];
ans+= num[i];
if(ans>t)
t = ans;
if(ans<0)
ans = 0;
dp[i] = t;
}
ans = -1002,t = -1002;
int sum=0;
for(int j = n-1; j >0; j--)
{//逆向求最大和,相加
sum+=num[j];
if(sum > t)
t =sum;
if(sum<0)
sum =0;
if(t+ dp[j-1] > ans)
ans = t + dp[j-1];
}
cout<<ans<<endl;
}
//cout << "Hello world!" << endl;
return 0;
}
最后
以上就是魁梧水壶为你收集整理的POJ 2593 动态规划(最大字串和)的全部内容,希望文章能够帮你解决POJ 2593 动态规划(最大字串和)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复