zoukankan      html  css  js  c++  java
  • BZOJ 3208 花神的秒题计划Ⅰ

    做题一定要看数据范围。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define maxn 750
    #define maxm 1000050
    using namespace std;
    int n,m,a,b,c,d,dp[maxn][maxn],h[maxn][maxn],ans=0;
    int dx[]={0,-1,1,0,0},dy[]={0,0,0,-1,1};
    bool vis[maxn][maxn];
    char s[10];
    bool judge(int x,int y)
    {
        return (x>=1 && x<=n && y>=1 && y<=n);
    }
    int get_dp(int x,int y)
    {
        if (dp[x][y]) return dp[x][y];
        vis[x][y]=dp[x][y]=1;
        for (int i=1;i<=4;i++)
        {
            int tx=x+dx[i],ty=y+dy[i];
            if (judge(tx,ty) && !vis[tx][ty] && h[tx][ty]>h[x][y]) 
                dp[x][y]=max(dp[x][y],get_dp(tx,ty)+1);
        }
        vis[x][y]=0;return dp[x][y];
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
            for (int j=1;j<=n;j++)
                scanf("%d",&h[i][j]);
        scanf("%d",&m);
        for (int i=1;i<=m;i++)
        {
            scanf("%s",s);
            if (s[0]=='C') {scanf("%d%d%d",&a,&b,&c);h[a][b]=c;}
            else if (s[0]=='S' || s[0]=='B')
            {
                scanf("%d%d%d%d",&a,&b,&c,&d);
                for (int i=a;i<=c;i++)
                    for (int j=b;j<=d;j++)
                        vis[i][j]=(s[0]=='S');
            }
            else
            {
                memset(dp,0,sizeof(dp));ans=0;
                for (int i=1;i<=n;i++)
                    for (int j=1;j<=n;j++)
                        if (!vis[i][j]) ans=max(ans,get_dp(i,j));
                printf("%d
    ",ans);
            }
        }
    }
  • 相关阅读:
    重要的环境变量
    常用的转义字符
    常用系统工作命令
    栈 队列 和 双向队列
    时间
    默认值字典
    Counter
    random
    22 内置常用模块01
    super
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/6539634.html
Copyright © 2011-2022 走看看