[GDKOI2016]染色大战

Description

 

Input


Output

 

Sample Input

3 3
0 0 0
0 0 0
0 0 0
3 2
5 1 

Sample Output

-1
 

Data Constraint

 


 

min-max对抗搜索回家再写

 


 

 

复制代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
inline int read() {
    int r=0;char c=getchar();bool f=0;
    while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
    while(isdigit(c))r=(r<<3)+(r<<1)+(c^48),c=getchar();
    return f?-r:r;
}
int n, m;
int bin[25];
int mp[22][22], f[2][1<<22], e[22][22], val[22][22];
int END;

int dfs(int x, int sit)
{
    if (sit == END) return 0;
    if (f[x][sit]) return f[x][sit];
    int res = -1e9;
    for (int i = 1 ; i <= n ; i ++)
    {
        for (int j = 1 ; j <= m ; j ++)
        {
            if (mp[i][j]) continue;
            int sum = 0;
            mp[i][j] = 1;
            if (mp[i][j] and mp[i-1][j] and mp[i][j-1] and mp[i-1][j-1]) sum += val[i-1][j-1];
            if (mp[i][j] and mp[i-1][j] and mp[i-1][j+1] and mp[i][j+1]) sum += val[i-1][j];
            if (mp[i][j] and mp[i+1][j] and mp[i+1][j+1] and mp[i][j+1]) sum += val[i][j];
            if (mp[i][j] and mp[i+1][j] and mp[i][j-1] and mp[i+1][j-1]) sum += val[i][j-1];
            if (sum) sum += dfs(x, sit + e[i][j]);
            else sum -= dfs(x^1, sit + e[i][j]);
            res = max(res, sum);
            mp[i][j] = 0;
        }
    }
    f[x][sit] = res;
    return res;
}

int main()
{
    bin[0] = 1;
    for (int i = 1 ; i <= 21 ; i ++) bin[i] = bin[i-1] << 1;
    n = read(), m = read();
    for (int i = 1 ; i <= n ; i ++)
    {
        for (int j = 1 ; j <= m ; j ++)
        {
            mp[i][j] = read();
            e[i][j] = (1 << ((i - 1) * m + j - 1));
            if (mp[i][j] == 0) END += e[i][j];
        }
    }
    for (int i = 1 ; i <= n - 1 ; i ++)
    {
        for (int j = 1 ; j <= m - 1 ; j ++)
        {
            val[i][j] = read();
        }
    }
    printf("%d\n", dfs(1, 0));
}
复制代码

 

posted @   zZhBr  阅读(247)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示