悬关

P1719 最大加权矩形

lucy2012 @ 2024-03-17 18:44:11

求调

#include<bits/stdc++.h>
using namespace std;
int sa[200][200],n,a,maxn;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            scanf("%d",&a);
            sa[i][j]=sa[i-1][j]+sa[i][j-1]+a;
            cout<<sa[i][j]<<' ';
        }
        cout<<endl;
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i==1&&j==1)
               maxn=sa[1][1];
            if(sa[i][j]>maxn)
               maxn=sa[i][j];
        }
    }
    cout<<maxn;
    return 0;
}   

by yh2022mayu @ 2024-03-17 19:06:18

首先,是子矩阵,不一定一(1,1)开头


by yh2022mayu @ 2024-03-17 19:10:37

所以要四重枚举


by lucy2012 @ 2024-03-17 19:33:12

@yh2022mayu

#include<bits/stdc++.h>
using namespace std;
int sa[200][200],n,a,maxn;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            scanf("%d",&a);
            sa[i][j]=sa[i-1][j]+sa[i][j-1]-sa[i-1][j-1]+a;
        }
        cout<<endl;
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=0;k<=i;k++){
                for(int q=0;q<=j;q++){
                    if(i==1&&j==1&&k==0&&q==0)
                        maxn=sa[i][j]-sa[k][q];
                    if(sa[i][j]-sa[k][q]>maxn)
                        maxn=sa[i][j]-sa[k][q];
                }
            }
        }
    }
    cout<<maxn;
    return 0;
}   

by yh2022mayu @ 2024-03-17 19:35:31

对的


by yh2022mayu @ 2024-03-17 19:36:01

(所以为什么11行要换行


by yh2022mayu @ 2024-03-17 19:46:35

#include<bits/stdc++.h>
using namespace std;
int sa[200][200],n,a,maxn;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            scanf("%d",&a);
            sa[i][j]=sa[i-1][j]+sa[i][j-1]-sa[i-1][j-1]+a;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=0;k<i;k++){
                for(int q=0;q<j;q++){
                    if(i==1&&j==1&&k==0&&q==0)
                        maxn=sa[i][j]+sa[k][q]-sa[i][q]-sa[k][j];
                    if(sa[i][j]+sa[k][q]-sa[i][q]-sa[k][j]>maxn)
                        maxn=sa[i][j]+sa[k][q]-sa[i][q]-sa[k][j];
                }
            }
        }
    }
    cout<<maxn;
    return 0;
}   

by yh2022mayu @ 2024-03-17 19:54:51

@lucy2012


by lutaoquan2012 @ 2024-03-17 20:24:52

@lucy2012 你在11行为什么要换行,这不也是我前面说的调试代码么?


by lucy2012 @ 2024-03-18 18:00:40

@yh2022mayu @lutaoquan2012 。。。谢了


|