题目链接:点击打开链接
题意:
T个测试数据
n个数字
q个询问
每个询问 : [x1, y1] [x2, y2]
问:
int ans = -inf;
for(int i = x1; i <= y1; i++)
for(int j = max(x2, i); j <= y2; j++)
ans = max(ans, query(i, j));
#include
#inc...
分类:
其他好文 时间:
2014-09-01 17:50:03
阅读次数:
227
题目链接:点击打开链接
== 原来写1的时候已经把更新函数写好了。。
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define N 50050
#define Lson(x) tree[x].l
#define Rson(x) tree[x].r
...
分类:
其他好文 时间:
2014-08-31 20:08:01
阅读次数:
247
题目链接:点击打开链接
每个点都是最大值,把一整个序列和都压缩在一个点里。
#include
#include
#include
#include
#include
using namespace std;
#define N 100005
#define Lson(x) (x<<1)
#define Rson(x) (x<<1|1)
#define L(x) tre...
分类:
其他好文 时间:
2014-08-31 14:33:31
阅读次数:
169
本题就是求m段子段,而且要求这些子段加起来和最大,最大子段和的Plus版本。
不过题意真的不好理解,x,y什么的都没有说清楚。
知道题意就开始解题了,这肯定是动态规划法了。
动态规划法的程序不难写,关键是抽象思维。
这里的最小情况是只分成一段的时候,就退化为最大子段和问题了,这个是段数的最小情况了; 如果只有0个数的时候,结果肯定为零了,或者如果只有一个数的时候就是这个数了,那么数列只有0...
分类:
其他好文 时间:
2014-08-15 14:41:48
阅读次数:
164
题意:。。。
策略:看着像贪心,感觉也是贪心。
很久之前做的,又做了一遍,好题。
代码:
#include
#include
int s[100005];
int main()
{
int t, i, j, l, st, en, n, v = 1;
scanf("%d", &t);
while(t --){
scanf("%d", &n);
for(i = 1; i <= n...
分类:
其他好文 时间:
2014-08-14 23:54:16
阅读次数:
201
题目链接:点击打开链接
题意:
第一行 n m
n个vector
下面n行 第一个数字u表示vector 的大小,然后后面u个数字给出这个vector
最后一行m个数字
表示把上面的vector拼接起来
得到一个大序列,求这个大序列的最大子段和
先预处理出每个vector的最大子段和,左起连续最大,右起连续最大,所有数的和
然后dp 一下。。
#include ...
分类:
其他好文 时间:
2014-08-13 18:55:07
阅读次数:
266
求最大子矩阵和的时候,思路是取出两行i,j,把这两行之间同一列的都加起来形成另外一个数组,求这个数组的最大子段和,求出来的这个和,就是这两行之间高度为i-j的子矩阵中最大的和。POJ1050#include#includeint a[101][101],n,temp[101];int solve()...
分类:
其他好文 时间:
2014-08-13 12:45:16
阅读次数:
208
public class MaxSubSeqSum {
/**
* 算法1,穷举搜索
*/
public static final int maxSubSeqSum1(int seq[]) {
int length = seq.length;
int sum = 0;
for (int i = 0; i < length; i++) {
for (int j = i;...
分类:
其他好文 时间:
2014-08-10 15:46:40
阅读次数:
221
一维最大字段和的扩展。
要诀是固定列的左右点,比如左边记录为left, 右边记录为right,那么一个循环left从0到COL,行最大值,那么right从left开始循环到COl,就可以考虑到所有列组合了,这个循环是O(n*n),然后求范围列内的行最大子段和,时间是O(n),
这样巧妙地把二维的问题转化为一维了,最终时间复杂度是O(n^3)。
可以参考Geeks上的讲解,不过他的最大...
分类:
其他好文 时间:
2014-08-08 18:12:56
阅读次数:
227
一维数组: 有n个数(以下都视为整数),每个数有正有负,现在要在n个数中选取相邻的一段,使其和最大,输出最大的和。[a1,a2,a3................,an].动态规划很容易解决该问题:int maxSum(int a[],int n){ int sum=0; int b=...
分类:
其他好文 时间:
2014-08-06 22:22:12
阅读次数:
187