二维前缀和

穿精又带淫゛_ 提交于 2020-01-30 00:35:59

题目大致意思求最大矩阵 输入k 矩阵元素和不超过k

#include<stdio.h>
#include<iostream> 
#include<algorithm>
typedef long long ll;
using namespace std;
ll a[255][255];
ll sum[255][255];
int main()
{
	ll k;
	int m,n;
	ll ma1=0;
	cin>>m>>n>>k;
	for(int i=1;i<=m;i++)
	for(int j=1;j<=n;j++)
	cin>>a[i][j];
	for(int i=1;i<=m;i++)
	for(int j=1;j<=n;j++)
	{
	sum[i][j]=a[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
//	printf("sum[%d][%d]=%d\n",i,j,sum[i][j]);
	}
	for(int i=1;i<=m;i++)
	{
	for(int x=i;x<=m;x++)
	{
	for(int j=1;j<=n;j++)
	{
	
	for(int y=j;y<=n;y++)
	{ 
		ll tmp=sum[x][y]-sum[x-i][y]-sum[x][y-j]+sum[x-i][y-j];
	//	printf("tmp=%lld\n",tmp);
		if(tmp<=k)
		{
			if(i*j>=ma1)
			ma1=i*j;
			break;//break相当于减枝,不用会超时
		 } 	
		
	}
	}
	}
	}
		if(ma1!=0)
		printf("%lld\n",ma1);
		else
		printf("-1\n");
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!