G - Black And White

=========================================================================================================================
数据范围很小,可以直接用DFS深搜出结果,,但如果不把数据 按升序排好序 就去进行深搜的话,会超时,优先让数量最多的放在前面
然后 如果有一个数字的数量  > (M×N+1)/2 则肯定 输出 NO;因为怎么也不可能不相邻;
设DFS(int y ,int x) 即对这个格子进行染色
=========================================================================================================================
代码:
 #include <algorithm>
#include <cstdio>
using namespace std; int Map[][];
int n,m,k,cas=; //行,列,数量,案例几
int flag = ; //判定dfs return条件 struct Node{
int num,s; //颜色编号,该颜色数量
}tail[];
bool cmp(Node a,Node b) { return a.s>b.s;} void print() //输出函数
{
printf("Case #%d:\nYES\n",cas++);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
printf(j==m?"%d\n":"%d ",Map[i][j]);
} void dfs(int y,int x)
{
for(int i =;i<=k;++i)
if(flag==) return;
else if(tail[i].s)
{
if(Map[y-][x]!=tail[i].num&&Map[y][x-]!=tail[i].num)
{
--tail[i].s; //改颜色数量-1;
Map[y][x] = tail[i].num;
if(y==n&&x==m&&flag!=)
{flag = ;print();return;} //如果格子填充完了,则输出
else if(x==m) //如果这一行填充完了,跳转至下一行
dfs(y+,);
else //否则前往这一行的下一个格子
dfs(y,x+);
++tail[i].s;
}
}
}
int main()
{
int T;
scanf("%d",&T); for(int num = ;num<=T;++num)
{
scanf("%d %d %d",&n,&m,&k);
for(int i = ;i<=k;++i)
{
scanf("%d",&tail[i].s);
tail[i].num = i;
}
sort(tail+,tail+k+,cmp);
if(tail[].s>(n*m+)/) {printf("Case #%d:\nNO\n",cas++); continue;}
flag = ;
dfs(,);
}
return ;
}

最新文章

  1. 通过COOKIE欺骗登录网站后台
  2. EF方便的添加一条信息...
  3. LeetCode 笔记24 Palindrome Partitioning II (智商碾压)
  4. poj 3669 线段树成段更新+区间合并
  5. input的type属性的修改
  6. 使用MSBUILD 构建时出错 error MSB3086: Task could not find &quot;sgen.exe&quot; using the SdkToolsPath的解决方法
  7. win10系统调用架构分析
  8. 阻塞式和非阻塞式IO
  9. PropertyGird( 属性表格) 组件
  10. BZOJ 1486: [HNOI2009]最小圈( 二分答案 + dfs判负圈 )
  11. 编写简单的辅助脚本来在 Google 表格上记账
  12. RSEG用法和汇编问号的涵义
  13. MySql中对Group by后的结果数进行Count
  14. 使用注解配置Spring
  15. PHP报错类型
  16. JavaScript学习笔记之call和apply
  17. 用Java批量重命名文件
  18. DevExpress v17.2新版亮点—WPF篇(四)
  19. 关于Python的那点吐槽
  20. Log4j记录日志使用方法

热门文章

  1. Linux下Vue项目搭建karma测试框架
  2. 【java开发系列】—— 深克隆和浅克隆
  3. 基于FPGA的HDMI显示设计(三)
  4. startup ORA-00845: MEMORY_TARGET not supported on this system
  5. Android下最小化程序到后台代码
  6. Hello World, S/4HANA for Customer Management 1.0
  7. Smart template的控件能否当成普通控件来用
  8. 欢迎来到“火龙族智者”的blog
  9. [转]Linux学习
  10. 从OC和C#中找乐趣:相同又不同的delegate