poj2479 Maximum sum
http://poj.org/problem?id=2479
题目大意:给定一组n个整数:a ={a1, a2,…,我们定义一个函数d(a)如下:

你的任务是计算d(A)。输入由T(<=30)测试用例组成。在输入的第一行中给出了测试用例(T)的数量。
每个测试用例包含两行。第一行是一个整数n(2<=n<=50000)。第二行包含n个整数:a1, a2,…,an。 ( | ai | < = 10000)。为每个测试用例打印一行。该行应该包含整数d(A)。
也就是说求最大的子段和,给定一个数组,求数组里左子段的和加上右子段的和的最大值。
算法思想:动态规划,用left[i]表示第1个数到第i个数的最大子段和,用right[i]表示第i个数到第n个数的最大值。我们要求的就是left[i]+right[i+1]的最大值。
状态转移方程:
1) left[i]=max{left[i-1]+a[i],a[i]} i=1,2,3,…;
2) right[i]=max{right[i+1]+a[i],a[i]} i=n,n-1,…;
3) max=max{left[i]+right[i+1]} i=n,n-1,…;
#include <iostream>
using namespace std;
int MaximumSum(int a[],int n)
{
int sum = , max=INT_MIN;
int *left, *right;
left = new int[n + ];
right = new int[n + ];
left[] = -;
right[n + ] = -;
for (int i = ; i < n; i++)
{
sum = sum + a[i];
if (sum > left[i-])left[i] = sum;
else left[i] = left[i-];
if (sum < )sum = ;//累加为负数时更新sum
}
sum = ;
for (int i = n; i > ; i--)
{
sum = sum + a[i];
if (sum > right[n+])right[i] = sum;
else right[i] = right[i + ];
if (sum < )sum = ;
if (right[i] + left[i - ] > max)max = right[i] + left[i - ];//在此可直接计算max
}
delete []left;
delete []right;
return max;
}
int main()
{
int t, n;
int array[];
cin >> t;
for (int i = ; i < t; i++)
{
cin >> n;
for (int j = ; j <= n; j++)
{
scanf_s("%d", &array[j]);
}
cout << MaximumSum(array, n) << endl;
} return ;
}
poj2479 Maximum sum的更多相关文章
- POJ2479 Maximum sum[DP|最大子段和]
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 39599 Accepted: 12370 Des ...
- POJ2479 Maximum sum(dp)
题目链接. 分析: 用 d1[i] 表示左向右从0到i的最大连续和,d2[i] 表示从右向左, 即从n-1到i 的最大连续和. ans = max(ans, d1[i]+d2[i+1]), i=0,1 ...
- POJ-2479 Maximum sum(动态规划)
最大子序列和的加强版. 借助最大子序列和,分别正向和反向遍历一遍得到left和right数组(具体含义见代码注释) 然后再对left和right数组进行修正,保存从对应元素起向左或向右的最大连续和. ...
- ural 1146. Maximum Sum
1146. Maximum Sum Time limit: 0.5 secondMemory limit: 64 MB Given a 2-dimensional array of positive ...
- UVa 108 - Maximum Sum(最大连续子序列)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- 最大子矩阵和 URAL 1146 Maximum Sum
题目传送门 /* 最大子矩阵和:把二维降到一维,即把列压缩:然后看是否满足最大连续子序列: 好像之前做过,没印象了,看来做过的题目要经常看看:) */ #include <cstdio> ...
- URAL 1146 Maximum Sum(最大子矩阵的和 DP)
Maximum Sum 大意:给你一个n*n的矩阵,求最大的子矩阵的和是多少. 思路:最開始我想的是预处理矩阵,遍历子矩阵的端点,发现复杂度是O(n^4).就不知道该怎么办了.问了一下,是压缩矩阵,转 ...
- ural 1146. Maximum Sum(动态规划)
1146. Maximum Sum Time limit: 1.0 second Memory limit: 64 MB Given a 2-dimensional array of positive ...
- UVa 10827 - Maximum sum on a torus
题目大意:UVa 108 - Maximum Sum的加强版,求最大子矩阵和,不过矩阵是可以循环的,矩阵到结尾时可以循环到开头.开始听纠结的,想着难道要分情况讨论吗?!就去网上搜,看到可以通过补全进行 ...
随机推荐
- 大乐透 Java随机码
package suijishu; import java.util.Random; // TODO Auto-generated method stub public class Xuanqi { ...
- pip安装python模块方法
网上搜索了很多,主流的配置方法分为两种: 摘自 1.http://www.jb51.net/article/83617.htm 安装pip的包并确定pip安装时的镜像源地址,国内常用的地址有: htt ...
- 内网IP和公网IP的区别
内网IP和公网IP的区别 什么是内网IP: 一些小型企业或者学校,通常都是申请一个固定的IP地址,然后通过IP共享(IP Sharing),使用整个公司或学校的机器都能够访问互联网.而 ...
- [转载红鱼儿]delphi 实现微信开发(2)接入微信公众号平台
先要学习一下接入的资料,在这里,因为原理都在,所以一定要认真阅读,然后,利用Delphi实现一个对应函数,然后申请微信公众平台接口测试帐号. function CheckSignature(const ...
- python的基础操作2
一 字符串格式化 占位符 %s和%d %s是属于字符串的占位符,而%d是属于数字类型的占位符 #占位符 %s %d # a="我叫%s,年龄%d,就是一个%s"%("al ...
- 2018.09.15 秘密的牛奶管道SECRET(次小生成树)
描述 约翰叔叔希望能够廉价连接他的供水系统,但是他不希望他的竞争对手知道他选择的路线.一般这样的问题需要选择最便宜的方式,所以他决定避免这种情况而采用第二便宜的方式. 现在有W(3 <= W & ...
- [GO]关于go的waitgroup
watigroup是用来控制一组goroutine的,用来等待一组goroutine结束 比如关于kafka的消费者代码除了生硬的让程序等待一个小时,也可以这样写 package main impor ...
- Vue 需要使用jsonp解决跨域时,可以使用(vue-jsonp)
1,执行命令 npm install vue-jsonp --save 2.src/main.js中添加: import VueJsonp from 'vue-jsonp' Vue.use(VueJs ...
- Redis Quick Start [遇到问题解决问题版]
http://redis.io/topics/quickstart make test 时的问题: 问题:gcc: Command not found 解决:yum install gcc [root ...
- 硬盘坏道检测工具对比(DiskGenius/HdTunePro/MHDD等)
说到硬盘检测软件,大家肯定会想到MHDD,但是MHDD真的好用?反正我觉得太难用了,只能在DOS下运行,不能在Win系统下运行:最重要的是只支持IDE硬盘模式,现在的主板几乎全部默认都是AHCI模式, ...