博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2479 Maximum sum【最大连续和2】
阅读量:5923 次
发布时间:2019-06-19

本文共 1505 字,大约阅读时间需要 5 分钟。

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).

Input

The input consists of T(<=30) test cases. The number of test cases (T) is given in the first line of the input.
Each test case contains two lines. The first line is an integer n(2<=n<=50000). The second line contains n integers: a1, a2, ..., an. (|ai| <= 10000).There is an empty line after each case.

Output

Print exactly one line for each test case. The line should contain the integer d(A).

Sample Input

1

10
1 -1 2 2 3 -3 4 -4 5 -5

Sample Output

13

分析:

动态规划。枚举两个子串的分割点i,1<=i<=n,分别求两个串的最大子串,求出的最大值即为所求。

设dp[i]为以元素i结束的子串的最大值,则dp[i]=max{dp[i-1]+a[i],a[i]}。设lt[i]为串a[1]-a[i]的最大子串的值,

则lt[i]=max{lt[i-1],dp[i]},同理可求rt[i]。

code:

 

View Code
#include
#define max(A,B)((A)>=(B)?(A):(B)) const int INF=100005; int a[INF]; int lt[INF]; int rt[INF]; int dp[INF]; int main() {
int i,j,c,n,sum; scanf("%d",&c); while(c--) {
scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); dp[n+1]=dp[0]=-INF; lt[0]=rt[n+1]=-INF; //正向求。从左向右求dp[i]、lt[i] for(i=1;i<=n;i++) dp[i]=max(dp[i-1]+a[i],a[i]); for(i=1;i<=n;i++) lt[i]=max(dp[i],lt[i-1]); //逆向求。从右向左求dp[i]、rt[i] for(i=n;i>=1;i--) dp[i]=max(dp[i+1]+a[i],a[i]); for(i=n;i>=1;i--) rt[i]=max(dp[i],rt[i+1]); //枚举两个子串的分隔点i sum=-INF; for(i=1;i<=n;i++) sum=max(sum,lt[i]+rt[i+1]); printf("%d\n",sum); } return 0; }

 

转载于:https://www.cnblogs.com/dream-wind/archive/2012/03/14/2396274.html

你可能感兴趣的文章
卸载mysql
查看>>
二叉树的遍历
查看>>
The Distinguish of the share or static lib in MFC
查看>>
如何导出数据库的数据词典
查看>>
linux下内存释放问题
查看>>
让Java和JavaScript进行交互
查看>>
android 上传文件
查看>>
linux逻辑卷管理
查看>>
java结合testng,利用mysql数据库做数据源的数据驱动实例
查看>>
LINQ之路12:LINQ Operators之数据转换(Projecting)
查看>>
SQL Server:数据库角色
查看>>
多标签主界面使用TRzPageControl
查看>>
对技术的态度—CoolShell 陈皓
查看>>
分享8个超棒的基于HTML5和jQuery的开发教程
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
Http 请求处理流程
查看>>
Linux硬盘速度测试的命令
查看>>
Win10 功能大全
查看>>
前后端联调
查看>>
AC米兰3500万签波兰神锋 意甲进球数仅次C罗
查看>>