#include
#include
using namespace std;
#define N 1000005
int a[N],dp[N],maxpre[N];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int i,j,n,m,tmp;
while(scanf("%d%d",&m,&n)==2)
{
for(...
分类:
其他好文 时间:
2015-06-06 18:18:43
阅读次数:
330
题目:给定(可能是负的)整数A1、A2、…、AN,求出并确定对应的序列的最大值。如果所有的整数都是负数,那么最大连续子数列和就是0,只是求出最大值,不需要求出具体的序列,作为这个题目的变种有很多情况下给你一个确定的数列,具体求和,大同小异,共有四种解法,按照时间复杂度来解,object-c实现,解法...
分类:
编程语言 时间:
2015-05-25 22:08:31
阅读次数:
130
题目描述 Description
给定n个数 a1,a2,...,ana_1 , a_2 , ... , a_n
定义 f(i,j)=ai+ai+1+ai+2+...+aj?1+aj(1≤i≤j≤n)f(i,j) = a_i + a_{i+1} + a_{i+2} + ... + a_{j-1} + a_j (1 ≤ i ≤ j ≤ n)
求 f(i,j)f(i,j) 的最大值
n≤106...
分类:
其他好文 时间:
2015-05-16 18:23:52
阅读次数:
181
一开始,看到这题,以为是最大连续子序列和的问题,写出了代码,提交了,WR,找了一些测试数据,结果发现这个算法并不能将所以的序列的解求出,只是满足一部分序列。
百度了一下,知道了要用单调队列来求解。
单调队列,也就是队列中必然是单调递减的或者递增的。而这题使用的是单调递增的队列。
单调队列使用的是双向队列,队尾队头都可以删除元素,只能从队尾插入元素。
比如求解一个数列{1 ,2 ,5 ,...
分类:
其他好文 时间:
2015-05-05 14:35:54
阅读次数:
173
题目描述:求一个序列中连续子序列和的最大值(如果全为负,则输出0)分析思路:简单的DP题1.分析:最开始想到的是分治,分治的复杂度是O[n*lb(n)][姑且把lb当做以2为底的对数],由于分治的时候遇到连接处的处理问题,一不小心就想到了原来这是DP题。2.状态转移方程:(1)sum[i]=max{...
分类:
其他好文 时间:
2015-03-11 21:32:59
阅读次数:
153
和之前的一题很像,直接套用。
#include
using namespace std;
int main()
{
int a[10001];
int n,i;
int sum,maxsum,start,maxstart,maxend;
while(cin>>n && n)
{
for(i=0;i<...
分类:
其他好文 时间:
2015-03-11 19:42:16
阅读次数:
147
解决最大连续子序列和的两种方法:分治,动态规划。
分治时间复杂度虽然更高,但我还是写了一遍加深对这种思想的理解:将一个问题分治成若干个小的同样思路的子问题来解决。本题将所求序列等分成左右两个子序列,愿序列的最大子序列和必是左序列最大子序列和,有序列最大子序列和,跨左右子序列最大和三者中的最大者。
动态规划:用dp[i]更新dp[i+1]就行。
分治:
//
// main.cpp
// ...
分类:
其他好文 时间:
2015-03-09 14:33:35
阅读次数:
216
问题描述
给定一个整数序列(可能有正数,0和负数),求它的一个最大连续子序列乘积。比如给定数组a={3, -4, -5, 6, -2},则最大连续子序列乘积为360,即3*(-4)*(-5)*6=360。
分析
求最大连续子序列乘积与最大连续子序列和问题有所不同,因为其中有正有负还有可能有0。
假设数组为a[],直接利用动归来求解,考虑到可能存在负数的情况,我们用Max[i]来...
分类:
其他好文 时间:
2015-01-08 22:47:32
阅读次数:
299
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1003简单dp,状态转移方程:sum[i] = max{sum[i-1]+a[i],a[i]}. (sum[i]记录以a[i]为子序列末端的最大连续和.)对于a[i]这个数字,我们考虑是否将它选入之前连续的序...
分类:
其他好文 时间:
2014-11-24 20:41:32
阅读次数:
216