• BZOJ3208: 花神的秒题计划Ⅰ


    BZOJ3208: 花神的秒题计划Ⅰ

    https://lydsy.com/JudgeOnline/problem.php?id=3208

    分析:

    • 暴力模拟,每次询问记忆化搜索。

    代码:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cstdlib>
    #include <set>
    #include <vector>
    #include <cmath>
    using namespace std;
    typedef long long ll;
    #define N 750
    int a[N][N],n,m,c[N][N],b[N][N];
    char opt[10];
    int f[N][N];
    int tx[]={0,1,0,-1};
    int ty[]={1,0,-1,0};
    int dp(int x,int y) {
    	if(b[x][y]>0) return 0;
    	if(f[x][y]!=-1) return f[x][y];
    	f[x][y]=0;
    	int i;
    	for(i=0;i<4;i++) {
    		int dx=x+tx[i], dy=y+ty[i];
    		if(dx>=1&&dx<=n&&dy>=1&&dy<=n&&a[dx][dy]<a[x][y]) {
    			f[x][y]=max(f[x][y],dp(dx,dy));
    		}
    	}
    	f[x][y]++;
    	return f[x][y];
    }
    int main() {
    	scanf("%d",&n);
    	int i,j,x,y,z,w;
    	for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&a[i][j]);
    	int m;
    	scanf("%d",&m);
    	while(m--) {
    		scanf("%s",opt+1);
    		if(opt[1]=='C') {
    			scanf("%d%d%d",&x,&y,&z);
    			a[x][y]=z;
    		}else if(opt[1]=='S') {
    			scanf("%d%d%d%d",&x,&y,&z,&w);
    			for(i=x;i<=z;i++) for(j=y;j<=w;j++) b[i][j]=1;
    		}else if(opt[1]=='B') {
    			scanf("%d%d%d%d",&x,&y,&z,&w);
    			for(i=x;i<=z;i++) for(j=y;j<=w;j++) b[i][j]=0;
    		}else {
    			for(i=1;i<=n;i++)for(j=1;j<=n;j++)f[i][j]=-1;
    			int ans=0;
    			for(i=1;i<=n;i++) for(j=1;j<=n;j++) {
    				ans=max(ans,dp(i,j));
    			}
    			printf("%d
    ",ans);
    		}
    	}
    }
    
  • 相关阅读:
    程序的局部性原理2
    程序的局部性原理
    ROM
    学习Spring Security OAuth认证(一)-授权码模式
    mybatis*中DefaultVFS的logger乱码问题
    maven生命周期绑定要点
    spring security antMatchers相关内容
    JSTL
    什么是CSS hack?
    Java中获得当前静态类的类名
  • 原文地址:https://www.cnblogs.com/suika/p/10205659.html
Copyright © 2020-2023  润新知