HDU 5113:Black And White(DFS)
2024-09-01 02:14:57
题意
给出一个n*m的图,现在有k种颜色让你对这个图每个格子染色,每种颜色最多可以使用col[i]次,问是否存在一种染色方案使得相邻格子的颜色不同。
思路
以为是构造题,结果是爆搜。对于每一个点,如果可以往右边搜,那么就往右边走,如果右边走不了,就往下重新开一行搜。(否则最后可能不是所有格子都染上颜色)
只有一个剪枝:if((rem + 1) / 2 < col[i]) return ;
(rem为剩下未染色的格子数),因为如果当前的颜色超过格子数的一半的时候,自己这个颜色必定和自己产生冲突。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int N = 1e5 + 11;
int n, m, k, mp[30][30], col[30], flag;
bool check(int x, int y, int id) {
if(mp[x-1][y] != id && mp[x+1][y] != id && mp[x][y-1] != id && mp[x][y+1] != id) return true;
return false;
}
void dfs(int x, int y, int rem) {
if(!rem) { flag = 1; return ; }
for(int i = 1; i <= k; i++)
if((rem + 1) / 2 < col[i]) return ;
for(int i = 1; i <= k; i++) {
if(!col[i] || !check(x, y, i)) continue;
col[i]--; mp[x][y] = i;
if(y < m) dfs(x, y + 1, rem - 1);
else dfs(x + 1, 1, rem - 1);
if(flag) return ;
col[i]++; mp[x][y] = 0;
}
}
int main() {
int t; scanf("%d", &t);
for(int cas = 1; cas <= t; cas++) {
scanf("%d%d%d", &n, &m, &k);
for(int i = 1; i <= k; i++) scanf("%d", &col[i]);
memset(mp, 0, sizeof(mp));
flag = 0;
dfs(1, 1, n * m);
printf("Case #%d:\n", cas);
if(!flag) puts("NO");
else {
puts("YES");
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
printf("%d%c", mp[i][j], j == m ? '\n' : ' ');
}
// puts("");
} return 0;
}
最新文章
- docker创建私有仓库
- Kafka消息时间戳(kafka message timestamp)
- javax.swing.JList 设置分割线
- PRML读书会第二章 Probability Distributions(贝塔-二项式、狄利克雷-多项式共轭、高斯分布、指数族等)
- UI2_视图切换
- 【转】VMware设置共享文件夹之后Ubuntu中看不到怎么办?
- Python实战之IO多路复用select实例
- 《程序设计语言&mdash;&mdash;实践之路(英文第三版)》【PDF】下载
- vue computed 原理
- Java数据解析之XML
- BZOJ1063 NOI2008 道路设计 树形DP
- Android Studio 好用的设置
- ccf-20161203--权限查询
- Linux文件系统命令 touch/rm
- 基于Android的小巫新闻客户端开发系列教程
- 首次进入页面的时候用js刷新页面
- 【BZOJ】2730: [HNOI2012]矿场搭建【Tarjan找割点】【分联通块割点个数】
- SDN前瞻 该来的来了!SDN 软件定义网络
- Redis数据类型之列表(list)
- mongodb数据导入导出mongoexport/mongoimport
热门文章
- sql server DateTime与DateTime2的区别
- 用MVVM模式开发中遇到的零散问题总结(2)
- 一个字体,大小,颜色可定义的自绘静态框控件-XColorStatic 类(比较好看,一共19篇自绘文章)
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻(转)
- 图像滤镜艺术---Hudson滤镜(Instagram)
- SQLServer 远程服务器不存在,未被指定为有效的发布服务器,或您无权查看可用的发布服务器
- oracle data guard备库备份恢复
- UWP中的消息提示框(二)
- Win10的UWP之标题栏的返回键(一)
- Tensorflow数据读取机制