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的更多相关文章

  1. POJ2479 Maximum sum[DP|最大子段和]

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 39599   Accepted: 12370 Des ...

  2. POJ2479 Maximum sum(dp)

    题目链接. 分析: 用 d1[i] 表示左向右从0到i的最大连续和,d2[i] 表示从右向左, 即从n-1到i 的最大连续和. ans = max(ans, d1[i]+d2[i+1]), i=0,1 ...

  3. POJ-2479 Maximum sum(动态规划)

    最大子序列和的加强版. 借助最大子序列和,分别正向和反向遍历一遍得到left和right数组(具体含义见代码注释) 然后再对left和right数组进行修正,保存从对应元素起向左或向右的最大连续和. ...

  4. ural 1146. Maximum Sum

    1146. Maximum Sum Time limit: 0.5 secondMemory limit: 64 MB Given a 2-dimensional array of positive ...

  5. UVa 108 - Maximum Sum(最大连续子序列)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  6. 最大子矩阵和 URAL 1146 Maximum Sum

    题目传送门 /* 最大子矩阵和:把二维降到一维,即把列压缩:然后看是否满足最大连续子序列: 好像之前做过,没印象了,看来做过的题目要经常看看:) */ #include <cstdio> ...

  7. URAL 1146 Maximum Sum(最大子矩阵的和 DP)

    Maximum Sum 大意:给你一个n*n的矩阵,求最大的子矩阵的和是多少. 思路:最開始我想的是预处理矩阵,遍历子矩阵的端点,发现复杂度是O(n^4).就不知道该怎么办了.问了一下,是压缩矩阵,转 ...

  8. ural 1146. Maximum Sum(动态规划)

    1146. Maximum Sum Time limit: 1.0 second Memory limit: 64 MB Given a 2-dimensional array of positive ...

  9. UVa 10827 - Maximum sum on a torus

    题目大意:UVa 108 - Maximum Sum的加强版,求最大子矩阵和,不过矩阵是可以循环的,矩阵到结尾时可以循环到开头.开始听纠结的,想着难道要分情况讨论吗?!就去网上搜,看到可以通过补全进行 ...

随机推荐

  1. Java数据结构和算法(三)顺序存储的树结构

    Java数据结构和算法(三)顺序存储的树结构 二叉树也可以用数组存储,可以和完全二叉树的节点一一对应. 一.树的遍历 // 二叉树保存在数组中 int[] data; public void preO ...

  2. DB2通用数据库性能调整的常用方法

    DB2通用数据库性能调整的常用方法 DB2通用数据库性能调整的常用方法 Agenda 统计值更新--runstats  调整Buffer pool  调整日志缓冲区大小  应用程序堆大小  排序堆大小 ...

  3. 使用JDBC连接MySql时出现:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration

    在连接字符串后面加上?serverTimezone=UTC 其中UTC是统一标准世界时间. 完整的连接字符串示例:jdbc:mysql://localhost:3306/test?serverTime ...

  4. 20145226夏艺华 《Java程序设计》第8周学习总结

    教材学习内容总结 学习目标 了解NIO 会使用Channel.Buffer与NIO2 会使用日志API.国际化 会使用正则表达式 了解JDK8增强功能 第14章 NIO与NIO2 14.1 认识NIO ...

  5. Linux各个版本资源下载

    Linux系统各发行版镜像下载(持续更新) == Linux系统各发行版镜像下载(2014年10月更新),如果直接下载不了,请使用迅雷下载.并且注意,我的下载地址,在  迅雷 里才起作用. Linux ...

  6. HDU 2058 The sum problem (数学+暴力)

    题意:给定一个N和M,N表示从1到N的连续序列,让你求在1到N这个序列中连续子序列的和为M的子序列区间. 析:很明显最直接的方法就是暴力,可是不幸的是,由于N,M太大了,肯定会TLE的.所以我们就想能 ...

  7. verilog基础--altera培训

    参数化 Localparam :与prameter一样,但不能被重写. Verilog-2001 格式, module mult_acc #(parameter size = 8 ) (...); 数 ...

  8. 做MFC的时候引用了头文件但VC还是报missing storage-class or type specifiers

    我在客户端clg.h头文件中引用了头文件“ClientSocket.h”,然后在客户端clg.h中的类中声明了类CClientSocket的对象,可是编译报错:d:\vc++\客户端\客户端dlg.h ...

  9. javascript实现责任链设计模式

    javascript实现责任链设计模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿这条链传递该请求,直到有一个对象处理他为止. 这是Gof的定义 ...

  10. 从Google Earth 中下载三维模型

    https://www.cnblogs.com/chidou-yin/p/4306224.html