zoukankan      html  css  js  c++  java
  • P4363 [九省联考2018]一双木棋chess

    思路

    容易发现只能在轮廓线的拐点处落子,所以棋盘的状态可以用一个n+m长度的二进制数表示
    转移就是10变成01

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <map>
    // #define int long long
    using namespace std;
    int A[20][20],B[20][20],n,m;
    //map<int,int> M,vis;
    int M[(1<<21)],vis[(1<<21)];
    void print(int x){
        for(int i=n+m-1;i>=0;i--)
            printf("%d",(x>>i)&1);
        putchar('
    ');
    }
    int dfs(int state,int which){//0 feifei 1 niuniu
    //	print(state);
    //	printf("which:%d
    ",which);
    //	getchar();
        if(vis[state]){
    //		printf("req=%d
    ",M[state]);
            return M[state];
        }
        vis[state]=true;
        int x=m,y=0;
        int mid;
        if(!which)
            mid=-0x3f3f3f3f3f3f3f3fLL;
        else
            mid=0x3f3f3f3f3f3f3f3fLL;
        for(int i=0;i<n+m;i++){
            if((i+1)<n+m&&((state>>i)&1)==0&&((state>>(i+1))&1)==1){
    //			printf("y=%d x=%d
    ",y+1,x);
                int to=state^(3<<i);
                if(!which)
                    mid=max(mid,dfs(to,which^1)+A[y+1][x]);
                else
                    mid=min(mid,dfs(to,which^1)-B[y+1][x]);
    //			printf("mid=%d
    ",mid);
            }
            if((state>>i)&1)
                y++;
            else
                x--;
        }
        M[state]=mid;
    //	printf("req=%d
    ",M[state]);
        return mid;
    }
    signed main(){
    //	freopen("test.in","r",stdin);
        scanf("%d %d",&n,&m);
    //	int t=clock();
        int st=(((1<<(n))-1)<<m),end=(1<<n)-1;
    //	print(st);
    //	print(end);
        vis[end]=true;
        M[end]=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                scanf("%d",&A[i][j]);
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                scanf("%d",&B[i][j]);
            }
        }
        printf("%d
    ",dfs(st,0));
    //	printf("time=%lf
    ",1.0*(clock()-t)/CLOCKS_PER_SEC);
        return 0;
    }
    
  • 相关阅读:
    小程序网络请求封装(三)
    上传图片
    struts2导出excel
    金额超过一定位数显示异常问题
    限制日期控件 最大可选值为当前日期
    substr函数小结
    票号自动生成(按照一定的规则)
    Nginx
    Cron表达式以及定时任务配置
    HTML Input 表单校验之datatype
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10569255.html
Copyright © 2011-2022 走看看