题解 | #最小面积子矩阵#
最小面积子矩阵
https://www.nowcoder.com/practice/8ef506fbab2742809564e1a288358554
#include <iostream> using namespace std; const int N=110; int a[N][N]; int f[N][N];//f[i][j]:从a[1][1]~a[i][j]的元素值之和 int main() { int n,m,k; cin>>n>>m>>k; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ f[i][j]=a[i][j]+f[i-1][j]+f[i][j-1]-f[i-1][j-1]; } } bool flag=false; int cnt=0x3f3f3f3f; //枚举起点 for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ //枚举终点 for(int ex=i;ex<=n;ex++){ for(int ey=j;ey<=m;ey++){ int sum=f[ex][ey]-f[ex][j-1]-f[i-1][ey]+f[i-1][j-1]; if(sum>=k) { cnt=min(cnt,(ex-i+1)*(ey-j+1)); flag=true; } } } } } if(flag) cout<<cnt<<endl; else cout<<-1<<endl; return 0; }