POJ2479,动态规划求最大字段和
来源:互联网 发布:淘宝叶彬儿彩妆 编辑:程序博客网 时间:2024/04/30 02:28
题意解释:
给定n个数,求两段连续不重叠子段的最大和。比如1 -1 2 2 3 -3 4 -4 5 -5结果就是 {2,2,3,-3,4} 和{5},也就是两者的和13。
选题原因:
解题思路:
先对数字串从左向右依次求出每段的连续子序列的最大字段和,并将其存入数组array[i]中(i为对应位置),再从右向左用同样的方法求一次最大字段和,并将每个子段i~n的和与对应的另一半1~i-1相加,求出最大值。也就是对每个位置i来说,求出[1~i-1]的最大子段和以及[i~n]的最大子段和,再相加起来,求最大的一个就行了。
与基础的求最大字段和不同的是,该题需要对每个子段记录其最大和,即存入数组array[i]中。
代码如下:#include <stdio.h>
int array[50001], num[50001];
const int MIN = -999999999;
int main()
{
int tcase, n;
scanf("%d", &tcase);
int tmp, ans, i, sum;
while(tcase--)
{
scanf("%d", &n);
tmp = MIN; sum = 0;
for(i = 1; i <= n; i++)
{
scanf("%d", &num[i]);
sum += num[i];
if(sum > tmp)
tmp = sum;
array[i] = tmp; // 记录每个字段的最大值。
if(sum < 0)
sum = 0;
}
tmp = ans = MIN;
sum = 0;
for(i = n; i > 1; i--)
{
sum += num[i];
if(sum > tmp)
tmp = sum;
if(ans < (array[i-1] + tmp))
ans = array[i-1] + tmp;
if(sum < 0)
sum = 0;
}
printf("%d\n", ans);
}
return 0;
}
又是学来的一道题,脑瓜疼,学别人的还不太会
- POJ2479,动态规划求最大字段和
- 动态规划 POJ2479与POJ2593 最大子段和
- 【动态规划(最大子序列和)】:poj2479,Maximum sum
- poj2479 && poj2593Maximum sum(求两个不相交最大字段的和)
- 求最大子序列长度及最大字段和 --动态规划法C++语言
- 【动态规划】poj2479 Maximum sum && poj2593 Max Sequence(求两段不相交字串的最大和)
- POJ2479 Java 动态规划
- 动态规划算法之最大字段和
- 动态规划解决最大字段和
- 最大字段和(动态规划法)
- 最大字段和——动态规划
- P1115 最大字段和 动态规划
- 动态规划:最大字段和问题
- 动态规划之最大字段和问题
- 动态规划之最大字段和
- 动态规划——最大字段和
- 求最大字段和问题(常规法,分治法,动态规划法)
- 动态规划求最大子段和
- Tomcat在Ubuntu中的安装和部署
- 玩一玩微信公众号开发(一) 接入系统
- ArrayList<Object> 转换为Map<Integer, ArrayList<String>>
- 一个关于String类的笔试题
- 凑算式-蓝桥-全排列
- POJ2479,动态规划求最大字段和
- HDU 1501 排列2(枚举)
- mcp2515驱动
- ZJOI2017 酱油记
- Opencv2.4.9各头文件功能说明
- 【读过的书,留下的迹】Spring技术内幕——深入解析Spring架构与设计原理
- SystemProperties.set permission denied
- 读取图片的三个颜色通道并显示
- thinkphp3.2 自定义常量及其在后台与模板的调用