【贪心\最大连续区间和】游览路线
2012-10-29 19:09
344 查看
求最大连续区间和的水题
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <functional>
using std::min;
using std::max;
long getint()
{
long rs=0;bool sgn=-1;char tmp;
do tmp=getchar();
while (!isdigit(tmp)&&tmp-'-');
if (tmp=='-'){sgn=0;tmp=getchar();}
do rs=(rs<<3)+(rs<<1)+tmp-'0';
while (isdigit(tmp=getchar()));
return sgn?rs:-rs;
}
long a[3010][510];
long b[510];
long que[510];
long sum[510];
long ans = -0x3f3f3f3f;
int main()
{
freopen("travel.in","r",stdin);
freopen("travel.out","w",stdout);
long n = getint();
long m = getint();
for (long i=1;i<n+1;i++)
for (long j=1;j<m+1;j++)
a[i][j] = getint();
for (long j=1;j<m+1;j++)
{
b[j] = -0x3f3f3f3f;
for (long i=1;i<n+1;i++)
{
b[j] = max(b[j],a[i][j]);
}
sum[j] = sum[j-1]+b[j];
}
long l = 0;
long r = 0;
r ++;
que[r] = 0;
for (long i=1;i<m+1;i++)
{
while (l<r && que[r]>=sum[i]) r--;
que[++r] = sum[i];
ans = max(ans,sum[i]-que[l+1]);
}
printf("%ld",ans);
return 0;
}
相关文章推荐
- 【贪心】【最大区间和】游览路线
- cf#22-B-Bargaining Table-枚举+贪心+dp(最大连续区间和)
- 【HDU5586 BestCoder Round 64 (div1)A】【贪心 最大连续子串】Sum 区间函数值变换使得数列权值和最大
- 任意区间的最长连续递增子序列,最大连续子序列和
- 线段树+DP 求区间连续最大子段和 hoj Candy
- Hdu 1540 求连续区间最大值的线段树
- 贪心算法之最大不相交区间数问题
- 贪心算法解决求数组最大连续和
- LA3938-Ray, Pass me the dishes!--动态最大连续区间和(线段树+前后缀数和组)
- 最大连续区间和的算法总结
- 区间最大连续和算法
- HDU-1806 Frequent values (RMQ, 最大连续值区间)
- HDU1003 Max Sum(最大连续子序和、贪心、DP)
- 贪心算法-求区间至少连续k的最大和
- 贪心——区间覆盖问题之最大不相交覆盖问题
- 求给定区间某字符最大连续个数
- HDU 1003(动态规划-最大连续区间和)
- 贪心法——区间的最大覆盖数
- BNUOJ39566 Do use segment tree (树链剖分+维护区间最大连续和)
- hdu 1024 Max Sum Plus Plus(DP->k段连续区间的最大和)