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),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩 ...
随机推荐
- Rocketmq Broker启动网卡顺序问题
方法一.修改网卡名称,因为网卡顺序是通过名称排列的 方法二.指定broker使用IP echo "brokerIP1=192.168.1.220" > conf/broker ...
- 使用 Suricata 进行入侵监控(一个简单小例子访问百度)
前期博客 基于CentOS6.5下Suricata(一款高性能的网络IDS.IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐) 1.自己编写一条规则,规则书写参考snort规则(suricata ...
- Oracle 的备份和恢复
Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备 份.导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/导入(Export/Import) 利 ...
- 关于使用myeclipse搭建tomcat环境运行web项目的方法
这两天准备改同事的一个系统的自适应,然而我没想到的是我竟然在打开这个项目上就遇到了困难,真的是too young too simple,究其根本就是了解的太少了,于是为了我不忘记,用博客的方式把它记录 ...
- Hadoop YARN学习之监控集群监控Nagios(4)
doop YARN学习之监控集群监控Nagios(4) 1. Nagios是一个流行的开源监控工具,可以用来监控Hadoop集群. 2. 监控基本的Hadoop服务 调试好脚本后命名为chek_res ...
- git ---合并和删除分支
git merge 分支名 //合并子分支到当前分支 git branch -d 分支名//删除分支
- Java快速读取大文件
Java快速读取大文件 最近公司服务器监控系统需要做一个东西来分析Java应用程序的日志. 第一步探索: 首先我想到的是使用RandomAccessFile,因为他可以很方便的去获取和设置文件指针,下 ...
- AWT编程时,Button按钮上的中文编程□□□
今天学到AWT编程时,照着书上的代码打,代码如下: import java.awt.*; public class PanelTest{ public static void main(Stri ...
- 洛谷——P2680 运输计划
https://www.luogu.org/problem/show?pid=2680 题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每 ...
- HTTP请求报文与响应报文格式
请求报文包含三部分: a.请求行:包含请求方法.URI.HTTP版本信息 b.请求首部字段 c.请求内容实体 响应报文包含三部分: a.状态行:包含HTTP版本.状态码.状态码的原因短语 b.响应首部 ...