题解 | #最小面积子矩阵#
最小面积子矩阵
https://www.nowcoder.com/practice/8ef506fbab2742809564e1a288358554
#include <iostream> using namespace std; const int N=110; int a[N][N],f[N][N]; 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]; //初始化前缀和数组 //f[i][j]:从a[0][0]~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]; int res=0x7fffffff; //枚举起点 bool flag=false; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ //枚举终点 for(int ei=i;ei<=n;ei++){ for(int ej=j;ej<=m;ej++){ int sum=f[ei][ej]-f[i-1][ej]-f[ei][j-1]+f[i-1][j-1]; if(sum>=k) { flag=true; res=min(res,(ei-i+1)*(ej-j+1)); } } } } } if(flag) cout<<res<<endl; else cout<<-1<<endl; return 0; }