• bzoj1047: [HAOI2007]理想的正方形


    读入以后想枚举j,用个maxv[i][j]数组表示在第i行,从第j个开始n个的最大值。

    后来再枚举i,记录最大值。

    最小值同理。

    复杂度O(abn)。

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int maxn = 1000;
    const int INF = 0x3f3f3f3f;
    
    int n,m,k,ans = INF;
    int map[maxn][maxn],minv[maxn][maxn],maxv[maxn][maxn];
    
    int main() {
        scanf("%d%d%d",&n,&m,&k);
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= m; j++)
                scanf("%d",&map[i][j]);
        for(int i = 1; i <= n; i++) 
            for(int j = 1; j <= m-k+1; j++) {
                int maxa = -INF,mina = INF;
                for(int l = j; l < j + k; l++) {
                    if(map[i][l] > maxa) maxa = map[i][l];
                    if(map[i][l] < mina) mina = map[i][l];
                }
                maxv[i][j] = maxa; 
                minv[i][j] = mina;
            }
        for(int j = 1; j <= m-k+1; j++) {
            for(int i = 1; i <= n-k+1; i++) {
                int maxa = -INF,mina = INF;
                for(int l = i; l < i + k; l++) {
                    maxa = max(maxa,maxv[l][j]);
                    mina = min(mina,minv[l][j]);
                }
                ans = min(ans,maxa-mina);
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    后续阶段第二天
    后续阶段第一天
    冲刺第五天
    冲刺第四天
    冲刺第三天
    冲刺第二天
    第二阶段-冲刺第一天
    第一阶段项目总结
    冲刺(7)
    团队开发冲刺第一阶段_6
  • 原文地址:https://www.cnblogs.com/invoid/p/5380324.html
Copyright © 2020-2023  润新知