bzoj3208: 花神的秒题计划Ⅰ

来源:互联网 发布:人力资源矩阵图 编辑:程序博客网 时间:2024/06/07 00:10

类似dp的记忆化搜索,看代码就似乎很好懂。。。
(其实是我太懒了233)

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,f[1005][1005],a[1005][1005],ans;bool k[1005][1005];int mx(int x,int y){    return x>y?x:y;}int move[4][2]={    {-1,0},{0,-1},{1,0},{0,1}};inline int read(){    char ch=getchar();int f1=0;    while(ch<'0'||ch>'9')    {        ch=getchar();    }    while(ch>='0'&&ch<='9')    {        f1*=10;        f1+=ch-'0';        ch=getchar();    }    return f1;}void dfs(int x,int y){    if(f[x][y]>1)return ;    for(int i=0;i<4;i++)    {        int tempx=x+move[i][0],tempy=y+move[i][1];        if(a[tempx][tempy]>a[x][y]&&!k[tempx][tempy])        {            dfs(tempx,tempy);            f[x][y]=mx(f[x][y],f[tempx][tempy]+1);        }        if(ans<f[x][y])        ans=f[x][y];    }}int main(){    int m,x,y,z,xx,yy;    cin>>n;    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            a[i][j]=read();        }    }    char s[5];    cin>>m;    for(int i=1;i<=m;i++)    {        scanf("%s",s);        if(s[0]=='C')        {            x=read();y=read();z=read();            a[x][y]=z;        }        else if(s[0]=='S')        {            x=read();y=read();xx=read();yy=read();            for(int i=x;i<=xx;i++)            {                for(int j=y;j<=yy;j++)                {                    k[i][j]=1;                }            }        }        else if(s[0]=='B')        {            x=read();y=read();xx=read();yy=read();            for(int i=x;i<=xx;i++)            {                for(int j=y;j<=yy;j++)                {                    k[i][j]=0;                }            }        }        else        {            ans=0;            for(int i=1;i<=n;i++)            {                for(int j=1;j<=n;j++)                if(!k[i][j])                f[i][j]=1;                else f[i][j]=0;            }            for(int i=1;i<=n;i++)            {                for(int j=1;j<=n;j++)                {                    if(!k[i][j])                    dfs(i,j);                }            }            printf("%d\n",ans);        }    }}
原创粉丝点击