zoukankan      html  css  js  c++  java
  • 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);
    		}
    	}
    }
    
  • 相关阅读:
    在Dictionary使用foreach的注意
    [公告]新增项目交流区
    博客园Blog程序中又一个奇怪问题
    公告
    网络爬客光顾博客园
    爬网的影响
    致歉
    [业界新闻]中文IT百科Beta版于2006年7月10日正式上线
    公告
    疯狂的爬网
  • 原文地址:https://www.cnblogs.com/suika/p/10205659.html
Copyright © 2011-2022 走看看