简单的dp@poj(2)2479最大子段和
来源:互联网 发布:梦想小镇mac无限绿钞 编辑:程序博客网 时间:2024/05/17 02:29
POJ 2479 Maximum sum
Description
Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below
Your task is to calculate d(A).
(1)状态:left[i]以第i位结尾时最大子串和 Right[i]为以i为间隔位 之后的字符串任何组合的最大字段和
(2)方程:if(left[i-1]<0) left[i]=a[i] else left[i]=left[i-1]+a[i] 同理Right[i]
(3)初值:left[i]=right[i]=a[i]
Attention:在poj如果用cin cout 此题 TLE
#include <iostream>
#include <stdio.h>
using namespace std;
//cin cout »»³Éprintf scanf ¹ýÁË£¡
int main()
{
int a[50001];
int left[50001],right[50001],Right[50001];
int Num,Length;
scanf("%d",&Num);
while(Num--)
{
scanf("%d",&Length);
for(int i=1; i<=Length; i++)
{
scanf("%d",&a[i]);
left[i]=right[i]=Right[i]=a[i];
}
left[0]=-1;
right[Length+1]=-1;
for(int i=1; i<=Length; i++)
{
if(left[i-1]>0)
left[i]=left[i-1]+left[i];
}
int r_max=-30000;
for(int i=Length; i>=1; i--)
{
if(right[i+1]>0)
right[i]=right[i+1]+right[i];
r_max=right[i]>r_max?right[i]:r_max;
Right[i]=r_max;
}
int max=-30000;
for(int i=1;i<Length;i++)
{
max=left[i]+Right[i+1]>max?left[i]+Right[i+1]:max;
}
printf("%d\n",max);
}
return 0;
}
#include <stdio.h>
using namespace std;
//cin cout »»³Éprintf scanf ¹ýÁË£¡
int main()
{
int a[50001];
int left[50001],right[50001],Right[50001];
int Num,Length;
scanf("%d",&Num);
while(Num--)
{
scanf("%d",&Length);
for(int i=1; i<=Length; i++)
{
scanf("%d",&a[i]);
left[i]=right[i]=Right[i]=a[i];
}
left[0]=-1;
right[Length+1]=-1;
for(int i=1; i<=Length; i++)
{
if(left[i-1]>0)
left[i]=left[i-1]+left[i];
}
int r_max=-30000;
for(int i=Length; i>=1; i--)
{
if(right[i+1]>0)
right[i]=right[i+1]+right[i];
r_max=right[i]>r_max?right[i]:r_max;
Right[i]=r_max;
}
int max=-30000;
for(int i=1;i<Length;i++)
{
max=left[i]+Right[i+1]>max?left[i]+Right[i+1]:max;
}
printf("%d\n",max);
}
return 0;
}
- 简单的dp@poj(2)2479最大子段和
- POJ 2479 最大子段和dp
- POJ 2479 Maximum sum (DP&双最大子段和)
- poj 2479 Maximum sum(dp&最大子段和)
- poj 2479 最大连续子段和 dp算法
- POJ 1050 To the Max && POJ 2479Maximum sum(DP最大连续子段和)
- poj 2479 dp Maximum sum求两段连续不重叠子段的最大和
- 蓝桥杯 最大子阵(dp最大子段和)
- POJ 2479 (算不上简单的dp,可以称为简单的求两个子串和最大)
- POJ 2479 最大子段和
- 最大子段和【DP】
- 最大子段和 (dp)
- POJ 2749最大子段和 双向DP
- poj 2479 两段连续子序列的最大和
- 51Nod 1049 最大子段和(简单DP)
- 51nod_1049 最大子段和(简单DP)
- 51Nod 1049 最大子段和【简单dp】
- POJ 2593(最大2连续子段和)
- 烟雨帘,等一个睛天
- 感冒了
- 强连通图的算法
- 设计模式C++实现(13)——中介者模式
- poj1258
- 简单的dp@poj(2)2479最大子段和
- jQuery:将文本转化成JSON对象应注意的问题
- Android入门第十四篇之画图
- Your content must have a ListView whose id attribute is android.R.id.list和ListView注意
- 程序员 未来 规划
- 求砖拍:绝对深入剖析各种方法实现两个变量的交换
- Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
- 没想到还真的是你啊 umask
- Linux下查找含有某字符串的文件的方法