POJ 2479 两段连续最大和
题目大意:
在一组数中,找到连续的两段 , 是这两段相加和达到最大
这里利用dp[2][N]的数组保存所有的状态
dp[0][i]表示取到第i个数时只取了一段的最大和,第i个数是一定要被取到的
dp[1][i]表示取到第i个数时取了2段的最大和,第i个数是一定要被取到的
而题目所求答案就是所有dp[1][i]中的最大值
状态转移方程:
dp[0][i] = max{dp[0][i-1]+a[i] , a[i]}
dp[1][i] = max{dp[0][j]+a[i] , dp[1][i-1]+a[i]} j<i
很容易看出dp[0][i]在线性时间内是能够求出来的
而dp[1][i]却因为j的原因,要在n^2的时间内求出,而我们这里只要找到dp[0][j]中的最大值
那么我们用maxn不断更新 i 之前的dp[0][j]的最大值即可
因为答案可能为负数,所以初始化要将数设置的尽可能小,我一开始memset为0,导致错误还不理解
POJ2593同理
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; #define N 50005
#define INF 200000000
int a[N] , dp[][N]; int main()
{
// freopen("a.in" , "r" , stdin);
int T;
scanf("%d" , &T);
while(T--)
{
int n;
scanf("%d" , &n);
dp[][] = -INF , dp[][] = -INF;
int maxn = -INF , ans = -INF;
for(int i= ; i<=n ; i++){
scanf("%d" , &a[i]);
dp[][i] = max(dp[][i-]+a[i] , a[i]);
if(i>) dp[][i] = max(a[i] + maxn , dp[][i-]+a[i]) , ans = max(ans , dp[][i]);
maxn = max(maxn , dp[][i]);
}
printf("%d\n" , ans);
// if(T>0) puts("");
}
return ;
}
POJ 2479 两段连续最大和的更多相关文章
- poj 2479 dp求分段最大和
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 38079 Accepted: 11904 Des ...
- poj 2479 Maximum sum(递推)
题意:给定n个数,求两段连续不重叠子段的最大和. 思路非常easy.把原串划为两段.求两段的连续最大子串和之和,这里要先预处理一下,用lmax数组表示1到i的最大连续子串和,用rmax数组表示n ...
- 求区间连续不超过K段的最大和--线段树+大量代码
题目描述: 这是一道数据结构题. 我们拥有一个长度为n的数组a[i]. 我们有m次操作.操作有两种类型: 0 i val:表示我们要把a[i]修改为val; 1 l r k:表示我们要求出区间[l,r ...
- poj 2479 (DP)
求一个区间内连续两段不相交区间最大和. // File Name: 2479.cpp // Author: Missa_Chen // Created Time: 2013年06月22日 星期六 16 ...
- 洛谷P1121 环状最大两段子段和
题目描述 给出一段环状序列,即认为A[1]和A[N]是相邻的,选出其中连续不重叠且非空的两段使得这两段和最大. 输入输出格式 输入格式: 输入文件maxsum2.in的第一行是一个正整数N,表示了序列 ...
- POJ 2479 Maximum sum 解题报告
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 40596 Accepted: 12663 Des ...
- 长度不超过n的连续最大和___优先队列
题目链接: https://nanti.jisuanke.com/t/36116 题目: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但 ...
- 洛谷 P1121 环状最大两段子段和 解题报告
P1121 环状最大两段子段和 题目描述 给出一段环状序列,即认为\(A_1\)和\(A_N\)是相邻的,选出其中连续不重叠且非空的两段使得这两段和最大. 输入输出格式 输入格式: 第一行是一个正整数 ...
- NYOJ-104最大和(动归题)及连续最大和核心
最大和 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩 ...
随机推荐
- How many Fibs? POJ - 2413
How many Fibs? POJ - 2413 高精模板 #include<cstdio> #include<cstring> #include<algorithm& ...
- Linux tcpdump命令英文文档
https://www.computerhope.com/unix/tcpdump.htm
- Hibernate3中重复引用hbm文件错误信息记录
Hibernate3中重复引用hbm文件错误信息记录. 八月 ::, ERROR - Context initialization failed org.springframework.beans.f ...
- go环境搭建及vscode中调试
1.下载go安装包一般国内用户无法在官网下载,可以自行百度找一些共享的资源墙内下载地址: http://www.golangtc.com/downloadCSDN上资源下载(一般需要积分):http: ...
- Linux命令(009) -- tar
tar命令可以为Linux的文件和目录创建档案(备份).利用该命令,可以为某一特定文件创建备份,也可以在档案中改变文件或向档案中加入新的文件:可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件 ...
- 关于jquery获取单选框value属性值为on的问题
当取单选框的value值的时候,前提是要有value这个属性,如果没有value属性那么取出来的就会为on 取value值的常见三种方式为 $("input[name='XXX']:chec ...
- 11.2Java-多态
一.父类 public class Fu { public void show(){ System.out.println("父类"); } } 二.子类 public class ...
- pandas之groupby分组与pivot_table透视表
zhuanzi: https://blog.csdn.net/qq_33689414/article/details/78973267 pandas之groupby分组与pivot_table透视表 ...
- 解决VS2010提示warning C4068: 未知的杂注
出现原因是#pragma声明问题,加上#pragma warning(disable:4068)即可 #pragma warning(disable:4068)#pragma execution_ch ...
- 字符串(String)几个常用方法的详解
String:(字符串) indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. stringObject.indexOf(searchvalue,fromindex) searc ...