HDU 5113 Black And White ( 2014 北京区预赛 B 、搜索 + 剪枝 )

题目链接

题意 : 给出 n * m 的网格、要你用 k 种不同的颜色填给出的网格、使得相邻的格子颜色不同、若有解要输出具体的方案

 

分析 :

看似构造、实则搜索、手构构半天没有什么好想法

直接搜就行了、注意加上剪枝

当剩下格子不足以让剩下颜色数量最多的颜色产生间隔的话则返回

具体也很好实现、即 max( 剩下的最多数量的那种颜色的数量 ) > ( 还剩多少格子 + 1 ) / 2

 

复制代码
#include<bits/stdc++.h>
using namespace std;

const int maxn = (int)1e2 + 10;

int rem[maxn];
int num[maxn];
int G[maxn][maxn];
int n, m, k;
int len;

bool Check(int tot)
{
    for(int i=1; i<=k; i++)
        if(rem[i] > (tot+1)/2)
            return false;
    return true;
}

bool DFS(int r, int c, int cur)
{
    if(cur == 0) return true;
    if(!Check(cur)) return false;
    for(int i=1; i<=k; i++){
        if(rem[i] > 0 && G[r][c-1] != i && G[r-1][c] != i){
            rem[i]--;
            G[r][c] = i;

            int rr, cc;
            if(c + 1 > m) rr = r+1, cc = 1;
            else rr = r, cc = c + 1;

            if(DFS(rr, cc, cur-1)) return true;

            G[r][c] = 0;
            rem[i]++;
        }
    }return false;
}

int main(void)
{
    int nCase;
    scanf("%d", &nCase);
    for(int T=1; T<=nCase; T++){

        memset(G, 0, sizeof(G));

        scanf("%d %d %d", &n, &m, &k);

        len = n * m;

        for(int i=1; i<=k; i++){
            scanf("%d", &num[i]);
            rem[i] = num[i];
        }

        printf("Case #%d:\n", T);
        if(DFS(1, 1, len)){
            puts("YES");
            int idx = 1;
            for(int i=1; i<=n; i++){
                for(int j=1; j<=m; j++){
                    if(j == 1) printf("%d", G[i][j]);
                    else printf(" %d", G[i][j]);
                }puts("");
            }

        }else puts("NO");


    }
    return 0;
}
View Code
复制代码

 

posted @   qwerity  阅读(139)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
历史上的今天:
2017-10-01 AC自动机及其模板
点击右上角即可分享
微信分享提示