二维前缀和
题目大致意思求最大矩阵 输入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");
}