zoukankan      html  css  js  c++  java
  • bzoj1499 [NOI2005]瑰丽华尔兹

    bzoj1499 [NOI2005]瑰丽华尔兹


    这题面是什么鬼。。。

    1. 没卵用
    2. cogs上:随着“强弱弱”的节奏,托尼的晕船症也奇迹般地一点一点恢复。
      bzoj上:随着“嘣嚓嚓”的节奏,托尼的晕船症也奇迹般的消失了。
      洛谷上:根本没有这段题面
      2333333333333
    3. bzoj上:当1900的音乐获得邮轮上所有人的欢迎时,他才8岁,而此时的他已经乘着海轮往返欧美大陆50余次了。
      欧美大陆???长见识了
    4. 这题tm居然是lrj出的= =(OTZ)

    扯淡结束
    这题不就是dp吗?
    f[i][j][k]表示i时间段 piano到了点(j,k) 求piano这一段滑行的最长距离
    (f[i][j]=sum f[i'][j']+dist)
    (i',j')表示能转移过来的点
    于是暴力dp出炉

    // It is made by XZZ
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define rep(a,b,c) for(rg int a=b;a<=c;a++)
    #define drep(a,b,c) for(rg int a=b;a>=c;a--)
    #define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
    #define il inline
    #define rg register
    #define vd void
    typedef long long ll;
    il int gi(){
        rg int x=0;rg char ch=getchar();
        while(ch<'0'||ch>'9')ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x;
    }
    const int maxx=201;
    const int X[]={23333,-1,1,0,0},Y[]={23333,0,0,-1,1};
    int n,m,_x,_y,k,inf;
    int f[2][maxx][maxx];
    int s[maxx],t[maxx],p[maxx];
    char c[maxx][maxx];
    il vd Max(int&a,int b){a=max(a,b);}
    int main(){
        n=gi(),m=gi(),_x=gi(),_y=gi(),k=gi();
        rep(i,1,n)scanf("%s",c[i]+1);
        rep(i,1,k)s[i]=gi(),t[i]=gi(),p[i]=gi();
        memset(f[0],-127,sizeof f[0]);inf=-f[0][0][0];
        f[0][_x][_y]=0;
        int now=0;
        rep(i,1,k){
            now^=1;
            memset(f[now],-127,sizeof f[now]);
            rep(j,1,n)rep(l,1,m){
                if(c[j][l]=='x')continue;
                static int lim,x,y;
                lim=t[i]-s[i]+1,x=j,y=l;
                rep(o,0,lim){
                    if(x==0||x==n+1||y==0||y==m+1)break;
                    if(c[x][y]=='x')break;
                    Max(f[now][j][l],o+f[now^1][x][y]);
                    x-=X[p[i]],y-=Y[p[i]];
                }
            }
        }
        int ans=-inf;
        rep(i,1,n)rep(j,1,m)Max(ans,f[now][i][j]);
        printf("%d
    ",ans);
        return 0;
    }
    

    傻B了什么优化都不加竟然A了。。。
    暴力A了就A了吧……用暴力A掉此题对于写程序的人来说没有任何益处,对lrj更没坏处
    不过05年的渣渣机子跑不过23333
    然后
    不会单调队列
    加了决策优化
    时间变成原来的一半啊。。。
    提交记录

    // It is made by XZZ
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define rep(a,b,c) for(rg int a=b;a<=c;a++)
    #define drep(a,b,c) for(rg int a=b;a>=c;a--)
    #define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
    #define il inline
    #define rg register
    #define vd void
    typedef long long ll;
    il int gi(){
        rg int x=0;rg char ch=getchar();
        while(ch<'0'||ch>'9')ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x;
    }
    const int maxx=201;
    const int X[]={23333,-1,1,0,0},Y[]={23333,0,0,-1,1};
    int n,m,_x,_y,k,inf;
    int f[2][maxx][maxx];
    int s[maxx],t[maxx],p[maxx];
    char c[maxx][maxx];
    il vd Max(int&a,int b){a=max(a,b);}
    int main(){
        n=gi(),m=gi(),_x=gi(),_y=gi(),k=gi();
        rep(i,1,n)scanf("%s",c[i]+1);
        rep(i,1,k)s[i]=gi(),t[i]=gi(),p[i]=gi();
        memset(f[0],-127,sizeof f[0]);inf=-f[0][0][0];
        f[0][_x][_y]=0;
        int now=0;
        rep(i,1,k){
            now^=1;
            memset(f[now],-127,sizeof f[now]);
            if(p[i]==1)rep(l,1,m){
                    int lst=-1;
                    drep(j,n,1){
                        if(c[j][l]=='x')continue;
                        static int lim,x,y;
                        lim=min(t[i]-s[i]+1,lst+1),x=j,y=l;
                        rep(o,0,lim){
                            if(x==0||x==n+1||y==0||y==m+1)break;
                            if(c[x][y]=='x')break;
                            if(f[now][j][l]<o+f[now^1][x][y])lst=o,f[now][j][l]=o+f[now^1][x][y];
                            x-=X[p[i]],y-=Y[p[i]];
                        }
                    }
                }
            else if(p[i]==2)rep(l,1,m){
                    int lst=-1;
                    rep(j,1,n){
                        if(c[j][l]=='x')continue;
                        static int lim,x,y;
                        lim=min(t[i]-s[i]+1,lst+1),x=j,y=l;
                        rep(o,0,lim){
                            if(x==0||x==n+1||y==0||y==m+1)break;
                            if(c[x][y]=='x')break;
                            if(f[now][j][l]<o+f[now^1][x][y])lst=o,f[now][j][l]=o+f[now^1][x][y];
                            x-=X[p[i]],y-=Y[p[i]];
                        }
                    }
                }
            else if(p[i]==3)rep(j,1,n){
                    int lst=-1;
                    drep(l,m,1){
                        if(c[j][l]=='x')continue;
                        static int lim,x,y;
                        lim=min(t[i]-s[i]+1,lst+1),x=j,y=l;
                        rep(o,0,lim){
                            if(x==0||x==n+1||y==0||y==m+1)break;
                            if(c[x][y]=='x')break;
                            if(f[now][j][l]<o+f[now^1][x][y])lst=o,f[now][j][l]=o+f[now^1][x][y];
                            x-=X[p[i]],y-=Y[p[i]];
                        }
                    }
                }
            else rep(j,1,n){
                    int lst=-1;
                    rep(l,1,m){
                        if(c[j][l]=='x')continue;
                        static int lim,x,y;
                        lim=min(t[i]-s[i]+1,lst+1),x=j,y=l;
                        rep(o,0,lim){
                            if(x==0||x==n+1||y==0||y==m+1)break;
                            if(c[x][y]=='x')break;
                            if(f[now][j][l]<o+f[now^1][x][y])lst=o,f[now][j][l]=o+f[now^1][x][y];
                            x-=X[p[i]],y-=Y[p[i]];
                        }
                    }
                }
        }
        int ans=-inf;
        rep(i,1,n)rep(j,1,m)Max(ans,f[now][i][j]);
        printf("%d
    ",ans);
        return 0;
    }
    

    更新:题面来自于电影《海上钢琴师》评分巨高

  • 相关阅读:
    概率期望,数学,贪心策略——2020-camp-day1-A
    k染色——2020-camp-day3-C
    树形dp——2020-camp-day3-G
    欧拉回路/路径——2020-camp-day2-H
    dsu on tree——2020-camp-day2-E
    Nim博弈,异或性质——2020-camp-day2-C
    一些视频资料
    开发人员收藏的网站
    各行公认的好书
    资料库链接
  • 原文地址:https://www.cnblogs.com/xzz_233/p/bzoj1499.html
Copyright © 2011-2022 走看看