二维前缀和

题目大致意思求最大矩阵 输入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");
}
全部评论

相关推荐

11-11 14:21
西京学院 C++
Java抽象练习生:教育背景放最前面,不要耍小聪明
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务