你作为战斗英雄得到国王的奖赏,可以在地图上选一块土地。地图里共n*m格土地,第x行第y列的土地格子里标记着d[x][y]的整数价值,可能出现负数。国王让你选择若干列土地,只要是连续的几列土地,你就可以都收入囊中。求你选的土地总价值最大能是多少?当然如果最大值是负数,请输出0
输入格式
输入文件reward1.in 输入一行为正整数n和m,n,m<=1000,之后为n*m的矩阵代表每一格的价值,绝对值不超过100
输出格式
输出文件reward1.out 输出一个整数
输入样例#1:
2 3 -1 1 -6 -1 1 -6
输出样例#1:
2
输入样例#2:
3 3 1 -1 -1 1 10 3 -3 2 -3
输出样例#2:
11
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,clmn[1009],d[1009][1009],f[1009];
int main(){
freopen("reward1.in","r",stdin);
freopen("reward1.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>d[i][j];
for(int j=1;j<=m;j++)
for(int i=1;i<=n;i++)
clmn[j]+=d[i][j];
for(int j=1;j<=m;j++)
f[j]=max(f[j-1],0)+clmn[j];
cout<<max(0,*max_element(f+1,f+m+1))<<endl;
return 0;
}