zoukankan      html  css  js  c++  java
  • I

    题目链接:https://nanti.jisuanke.com/t/A1538

    题意:给一个4*4的方阵,k个回合,a和b轮流选一个2*2的矩阵和,a要使和最大,b要使和最小,选完后2*2矩阵要逆时针旋转九十度,a先选,然后求最合理的答案。

    思路:因为方阵只有4*4,所以暴力dfs。

    #include<cstring>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<queue>
    #include<cstdio>
    #include<stack>
    #include<cmath>
    #include<iostream>
    #define ll long long
    #define lowbit(x) x&(-x)
    #define maxn 1050000
    #define inf 0x3f3f3f3f
    using namespace std;
    int mp[5][5];
    int k;
    void shun(int x,int y)
    {
        int t=mp[x][y];
        mp[x][y]=mp[x+1][y];
        mp[x+1][y]=mp[x+1][y+1];
        mp[x+1][y+1]=mp[x][y+1];
        mp[x][y+1]=t;
    }
    void ni(int x,int y)
    {
        int t=mp[x][y];
        mp[x][y]=mp[x][y+1];
        mp[x][y+1]=mp[x+1][y+1];
        mp[x+1][y+1]=mp[x+1][y];
        mp[x+1][y]=t;
    }
    int fun(int x,int y)
    {
        return mp[x][y]+mp[x+1][y]+mp[x+1][y+1]+mp[x][y+1];
    }
    int dfs(int dep)
    {
        if(dep==2*k)
        {
            int mi=inf;
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    mi=min(mi,fun(i,j));
                }
            }
            return mi;
        }
        if(dep%2==1)
        {
            int ma=0;
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    ni(i,j);
                    int ans=fun(i,j)+dfs(dep+1);
                    ma=max(ma,ans);
                    shun(i,j);
                }
            }
            return ma;
        }
        else
        {
            int mi=inf;
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    ni(i,j);
                    int ans=fun(i,j)+dfs(dep+1);
                    mi=min(mi,ans);
                    shun(i,j);
                }
            }
            return mi;
        }
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&k);
            for(int i=1;i<=4;i++)
            {
                for(int j=1;j<=4;j++)
                {
                    scanf("%d",&mp[i][j]);
                }
            }
            int ans=dfs(1);
            printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    web性能优化
    比 git log 更强大的 git reflog
    父组件调用子组件的方法
    react-loadable 进行代码分割的基本使用
    create-react-app 使用 webpack 打包压缩失败
    mysql安装问题
    php 二维数组排序
    php 文件缓存 include vs serialize vs json_encode
    ab命令压力测试
    mysql使用的坑
  • 原文地址:https://www.cnblogs.com/2462478392Lee/p/11650154.html
Copyright © 2011-2022 走看看