上交oj 1002 二哥的花生 (待解决)

这到底没做出来。。。。第一次以为穷举就可以,结果完蛋了,超时,又想出来了一个巧方法,结果总是wa。。。无语


http://acm.sjtu.edu.cn/OnlineJudge/problem/1002

贴出代码来看看,以后解决


#include <iostream>
using namespace std;
int a[1010][1010];
int sum[1010][1010];
int main()
{
	int L,W;	
	cin>>L>>W;
	for(int i=0;i<L;i++)
		for(int j=0;j<W;j++)
			cin>>a[i][j];
	int l,w,m=0;
	cin>>l>>w;
	sum[0][0]=0;
	for(int i=0;i<L-l+1;i++)
		for(int j=0;j<W-w+1;j++){
			if(i==0&&j==0){				
				for(int x=i;x-i<l;x++)
					for(int y=j;y-j<w;y++)
						sum[i][j]+=a[x][y];
				if(m<sum[i][j]) m=sum[i][j];
			}
			else if	(j==0){
				sum[i][j]=sum[i-1][j];
				for(int y=0;y<l;y++){
					sum[i][j]-=a[i-1][y];
					sum[i][j]+=a[i+l-1][y];
				}	
				if(m<sum[i][j]) m=sum[i][j];			
			}
			else {
				sum[i][j]=sum[i][j-1];
				for(int x=i;x<i+w;x++){
					sum[i][j]-=a[x][j-1];
					sum[i][j]+=a[x][j+w-1];
				}
				if(m<sum[i][j]) m=sum[i][j];
			}
			
		}
		/*
for(int i=0;i<L;i++)
		{
			for(int j=0;j<W;j++)
				cout<<sum[i][j]<<" ";
			cout<<endl;	
		}*/
	cout<<m<<endl;
	return 0;
}


你可能感兴趣的:(上交oj 1002 二哥的花生 (待解决))