题目链接

题意

给出一个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;
}

最新文章

  1. docker创建私有仓库
  2. Kafka消息时间戳(kafka message timestamp)
  3. javax.swing.JList 设置分割线
  4. PRML读书会第二章 Probability Distributions(贝塔-二项式、狄利克雷-多项式共轭、高斯分布、指数族等)
  5. UI2_视图切换
  6. 【转】VMware设置共享文件夹之后Ubuntu中看不到怎么办?
  7. Python实战之IO多路复用select实例
  8. 《程序设计语言&mdash;&mdash;实践之路(英文第三版)》【PDF】下载
  9. vue computed 原理
  10. Java数据解析之XML
  11. BZOJ1063 NOI2008 道路设计 树形DP
  12. Android Studio 好用的设置
  13. ccf-20161203--权限查询
  14. Linux文件系统命令 touch/rm
  15. 基于Android的小巫新闻客户端开发系列教程
  16. 首次进入页面的时候用js刷新页面
  17. 【BZOJ】2730: [HNOI2012]矿场搭建【Tarjan找割点】【分联通块割点个数】
  18. SDN前瞻 该来的来了!SDN 软件定义网络
  19. Redis数据类型之列表(list)
  20. mongodb数据导入导出mongoexport/mongoimport

热门文章

  1. sql server DateTime与DateTime2的区别
  2. 用MVVM模式开发中遇到的零散问题总结(2)
  3. 一个字体,大小,颜色可定义的自绘静态框控件-XColorStatic 类(比较好看,一共19篇自绘文章)
  4. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻(转)
  5. 图像滤镜艺术---Hudson滤镜(Instagram)
  6. SQLServer 远程服务器不存在,未被指定为有效的发布服务器,或您无权查看可用的发布服务器
  7. oracle data guard备库备份恢复
  8. UWP中的消息提示框(二)
  9. Win10的UWP之标题栏的返回键(一)
  10. Tensorflow数据读取机制