就是按着DP的思路来做的,结果还是想不到。T_T,行了,别玻璃心了,继续。

这道题目是求在一列数里,由两部分子段和组成的最大和。即对于连续整数组成的串 S1、S2,使 S1 + S2 的和最大。

题目与求最大子段和有相似之处,可以说是最大子段和的变形。

最大子段和:

  在一列数里,对于连续整数组成的串S,使 S 的值最大。

  最大子段和的动态规划方程, dp[i] = max(dp[i-1] + arr[i], arr[i]); 意义:当遍历到当前第 i 个数时,比较 {前一状态dp[i-1] 加上当前数 arr[i]} 与 {arr[i]的大小},选取大的为当前状态。 其实 也就是看 dp[i-1] 是否大于0。

回到这个题目,我们进行的操作是,先从 0 -> n-1 算一次最大子段和,记录在 lft[] 中; 然后再从 n-1 -> 0 倒着算一次最大子段和,记录在rht[]中。

我们要再从 0 -> n-1 遍历一遍看,在当前状态 i 为基准的情况,将它的前半段 和 后半段的值加起来,然后在这里边找最大。

因为在求最大 Max 时, 前半段一定,可以直接用lft[],而后半段是到当前后半段里的最大值,所以还要进行一次操作找出每个位置之后最大值。

动态规划路还很长啊!

 #include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = ;
int lft[MAXN];
int rht[MAXN];
int arr[MAXN]; int main() {
int T;
scanf("%d", &T);
while(T--) {
int n;
scanf("%d", &n);
for(int i = ; i < n; ++i)
scanf("%d", arr+i);
lft[] = arr[], rht[n-] = arr[n-];
for(int i = ; i < n; ++i) //求到 i 的位置时, 最大子段和
lft[i] = max(arr[i], lft[i-] + arr[i]);
for(int i = n-; i >= ; --i) // 反过来求到 i 的位置时,最大子段和
rht[i] = max(arr[i], rht[i+] + arr[i]);
for(int i = n-; i >= ; --i) // 在计算两部分相加的时候,后边是从当前到最后所有最短和最大的
rht[i] = max(rht[i+], rht[i]);
int Max = -;
for(int i = ; i < n-; ++i) //计算由两部分组成的子段和里的最大值
Max = max(Max, lft[i] + rht[i+]);
printf("%d\n", Max);
}
return ;
}

2593与2479一模一样

Poj2479 & Poj 2593的更多相关文章

  1. poj 2593&&poj2479(最大两子段和)

    Max Sequence Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 16850   Accepted: 7054 Des ...

  2. poj 2593 Max Sequence(线性dp)

    题目链接:http://poj.org/problem?id=2593 思路分析:该问题为求给定由N个整数组成的序列,要求确定序列A的2个不相交子段,使这m个子段的最大连续子段和的和最大. 该问题与p ...

  3. POJ 2479 Maximum sum POJ 2593 Max Sequence

    d(A) = max{sum(a[s1]..a[t1]) + sum(a[s2]..a[t2]) | 1<=s1<=t1<s2<=t2<=n} 即求两个子序列和的和的最大 ...

  4. POJ 2593 Max Sequence

    Max Sequence Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17678   Accepted: 7401 Des ...

  5. POJ 2593&&2479:Max Sequence

    Max Sequence Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 16329   Accepted: 6848 Des ...

  6. POJ 2593

    #include <iostream> #include <stdio.h> using namespace std; int cmp ( const void *a , co ...

  7. POJ2479,2593: 两段maximum-subarray问题

    虽然是两个水题,但是一次AC的感觉真心不错 这个问题算是maximum-subarray问题的升级版,不过主要算法思想不变: 1. maximum-subarray问题 maximum-subarra ...

  8. 动态规划(DP),递推,最大子段和,POJ(2479,2593)

    题目链接:http://poj.org/problem?id=2479 解题报告: 1.再求left[i]的时候,先没有考虑a[i]的正负,先把a[i]放到left[i]中,然后left=max(le ...

  9. POJ推荐50题

    此文来自北京邮电大学ACM-ICPC集训队 此50题在本博客均有代码,可以在左侧的搜索框中搜索题号查看代码. 以下是原文: POJ推荐50题1.标记“难”和“稍难”的题目可以看看,思考一下,不做要求, ...

随机推荐

  1. [Unity3D] Normal map、Diffuse map 和 Speculer map

    Normal map : Normal map (法线贴图) 它的作用是模拟出高模上的一些细节纹理,特别是将高模上的圆滑和粗糙度投射到低模上,让低模也有高模的效果. 因为高模的面数非常多,导入引擎后电 ...

  2. 浏览器内核控制Meta标签说明文档

    浏览器内核控制Meta标签说明文档 原文链接 背景介绍 由于众所周知的情况,国内的主流浏览器都是双核浏览器:基于Webkit内核用于常用网站的高速浏览.基于IE的内核用于兼容网银.旧版网站.以360的 ...

  3. Java Web 学习链接

    解决JSP中文乱码问题:http://www.cnblogs.com/chengkai/articles/2171848.html 编程思想之多线程与多进程:http://blog.csdn.net/ ...

  4. PHP流式上传和表单上传(美图秀秀)

    最近需要开发一个头像上传的功能,找了很多都需要授权的,后来找到了美图秀秀,功能非常好用. <?php /** * Note:for octet-stream upload * 这个是流式上传PH ...

  5. 编译PHP 报错:node.c: In function dom_canonicalization

    编译PHP 报错:node.c: In function dom_canonicalization  /opt/php-5.2.17/ext/dom/node.c:1953: error: deref ...

  6. 如何给外部引用的js文件传递参数

    1.定义全局变量 <script language="javascript"> var g = "I'm here"; </script> ...

  7. 使用maven打包的注意事项

    maven编译项目的时候,默认使用的GBK,而目前大部分代码都使用的UTF-8的方式,所以这时候打出来的包容易出现乱码. 解决方式: <!-- compiler插件, 设定JDK版本 --> ...

  8. MySQL SQL中的安全问题

    一.SQL注入是一个很常见的问题:利用的原理是SQL语句中的 "or"操作符或者"/*"和"#"注释符.前者利用逻辑运算,或者利用MySQL ...

  9. 用Javascript(js)进行HTML转义工具(处理特殊字符显示)

    转自:http://blog.csdn.net/hj7jay/article/details/51280405  众所周知页面上的字符内容通常都需要进行HTML转义才能正确显示,尤其对于Input,T ...

  10. espcms会员二次开发文件说明——会员,时间格式

    [espcms会员图片字段] 添加字段加入图片类型/webadm/include/inc_formtypelist.php 会员修改页面模型/webadm/templates/member/membe ...