求助(有点难
查看原帖
求助(有点难
332549
幽灵特工楼主2021/6/17 17:07

qzh是二维前缀和数组

#include <bits/stdc++.h>
using namespace std;
int n,m,r,s;
int a[20][20];
int qzh[20][20];
int h[20],l[20];//行列
int ans=1e8;
int check(){
    int cnt=0;
    for(int i=1;i<=r;i++){
        for(int j=1;j<=s;j++){
            cnt=max(qzh[h[i]][l[j]]-qzh[h[i-1]][l[j]]-qzh[h[i]][l[j-1]]+qzh[h[i-1]][l[j-1]],cnt);
        }
    }
    return cnt;
}

void sol(int x,int y,int rr,int ss){
    if(rr>r||ss>s)return;
    if(rr==r&&ss==s)ans = min(ans,check());
    h[rr]=x;l[ss]=y;
    sol(x+1,y,rr+1,ss+1);
    sol(x,y+1,rr+1,ss+1);
}

int main(){
    ios::sync_with_stdio(0);
    cin>>n>>m>>r>>s;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
            qzh[i][j]=qzh[i-1][j]+qzh[i][j-1]-qzh[i-1][j-1]+a[i][j];
        }
    }
    sol(1,1,0,0);
    cout<<ans;
}
2021/6/17 17:07
加载中...