zoukankan      html  css  js  c++  java
  • BZOJ 1177 Oil(特技枚举)

    对于三个正方形的位置一共有六种情况。

    预处理出(i,j)左上角,左下角,右上角,右下角区域内最大权值的正方形。

    枚举分界线更新答案。

    刚开始想了一个错误的DP也是蠢啊。

    #include<set>
    #include<map>
    #include<ctime>
    #include<queue>
    #include<cmath>
    #include<cstdio>
    #include<vector>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #define inf 100000000000000LL
    #define pa pair<int,int>
    #define ll long long
    #define N 2505
    #define fp(a,b,c) for(int a=b;a<=c;a++)
    #define fd(a,b,c) for(int a=c;a>=b;a--)
    using namespace std;
    int n,m,K,ans;
    int a[N][N],b[N][N],c[N][N],d[N][N],s[N][N];
    int main()
    {
        scanf("%d%d%d",&n,&m,&K);
        fp(i,1,n)fp(j,1,m)
        {
            int x;scanf("%d",&x);
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+x;
        }
        fd(i,K,n)fd(j,K,m)s[i][j]-=s[i-K][j]+s[i][j-K]-s[i-K][j-K];
    
        fp(i,K,n)fp(j,K,m)a[i][j]=max(s[i][j],max(a[i-1][j],a[i][j-1]));
        fp(i,K,n)fd(j,K,m)b[i][j]=max(s[i][j],max(b[i-1][j],b[i][j+1]));
        fd(i,K,n)fp(j,K,m)c[i][j]=max(s[i][j],max(c[i+1][j],c[i][j-1]));
        fd(i,K,n)fd(j,K,m)d[i][j]=max(s[i][j],max(d[i+1][j],d[i][j+1]));
    
        fp(i,K,n-K)fp(j,K,m-K)ans=max(ans,a[i][j]+b[i][j+K]+c[i+K][m]);
        fp(i,K,n-K)fp(j,K+K,m)ans=max(ans,b[i][j]+d[i+K][j]+a[n][j-K]);
        fp(i,K+K,n)fp(j,K,m-K)ans=max(ans,c[i][j]+d[i][j+K]+a[i-K][m]);
        fp(i,K,n-K)fp(j,K,m-K)ans=max(ans,a[i][j]+c[i+K][j]+b[n][j+K]);
    
        fp(i,K,n)fp(j,K+K,m-K)ans=max(ans,s[i][j]+a[n][j-K]+b[n][j+K]);
        fp(i,K+K,n-K)fp(j,K,m)ans=max(ans,s[i][j]+a[i-K][m]+c[i+K][m]);
    
        printf("%d
    ",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    WeUI——switch开关转换
    WeUI——单选框
    WeUI——CheckBox表单复选框
    WeUI——表单输入框状态
    WeUI——表单验证码
    详细介绍 C# 中的方法和参数
    C# 中类的基本概念
    C# 中的类型和变量
    学习 C# 从 Hello World 开始吧
    C# 和 .NET Core 的关系
  • 原文地址:https://www.cnblogs.com/lishiyao/p/6758868.html
Copyright © 2011-2022 走看看