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 ;
}

Black And White (DFS 训练题)的更多相关文章

  1. X-NUCA 2017 web专题赛训练题 阳光总在风雨后和default wp

     0X0.前言 X-NUCA 2017来了,想起2016 web专题赛,题目都打不开,希望这次主办方能够搞好点吧!还没开赛,依照惯例会有赛前指导,放一些训练题让CTFer们好感受一下题目. 题目有一大 ...

  2. POJ 1321 棋盘问题(DFS板子题,简单搜索练习)

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 44012   Accepted: 21375 Descriptio ...

  3. poj1564 Sum It Up dfs水题

    题目描述: Description Given a specified total t and a list of n integers, find all distinct sums using n ...

  4. PAT乙级真题及训练题 1025. 反转链表 (25)

    PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...

  5. 日常 java+雅思+训练题1

    今天主要学了一些类似c中的一些语句,java也是一样类似的,只有一些点需要稍微注意一下,一些语句是新增的需要知道. 完完全全新学的知识就是class和instance的区别.如何创建实例.数据的封装. ...

  6. 咸鱼的ACM之路:DFS水题集

    DFS的核心就是从一种状态出发,转向任意的一个可行状态,直到达到结束条件为止.(个人理解) 下面全是洛谷题,毕竟能找到测试点数据的OJ我就找到这一个....在其他OJ上直接各种玄学问题... P159 ...

  7. HDU 1728 逃离迷宫(DFS经典题,比赛手残写废题)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. 2016HUAS暑假集训训练题 G - Oil Deposits

    Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...

  9. hdu 1045:Fire Net(DFS经典题)

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

随机推荐

  1. 【Spring实战】—— 10 AOP针对参数的通知

    通过前面的学习,可以了解到 Spring的AOP可以很方便的监控到方法级别的执行 ,针对于某个方法实现通知响应. 那么对于方法的参数如何呢? 比如我们有一个方法,每次传入了一个字符串,我想要知道每次传 ...

  2. xHTML与HTML的写法有什么不同?

    全部标签都必须小写 在XHTML中,全部的标签都必须小写.不能大写和小写穿插当中.也不能全部都是大写. 事比例如以下. 错误:<Head></Head><Body> ...

  3. 【洛谷5294】[HNOI2019] 序列(主席树维护单调栈+二分)

    点此看题面 大致题意: 给你一个长度为\(n\)的序列\(A\),每次询问修改一个元素(只对当前询问有效),然后让你找到一个不下降序列\(B\),使得这两个序列相应位置之差的平方和最小,并输出这个最小 ...

  4. bzoj 3339 莫队

    题意: 求任意一个区间的SG函数. 想到线段树,但是线段树合并很麻烦. 线段树——分块. 分块的一个应用就是莫队算法. 怎么暴力递推呢? 从一个区间到另一个区间,Ans 取决于 Ans 和 加入和删除 ...

  5. Bokeh 学习

    这段时间由于在做K-means对文本进行处理,需要进行绘图,实验室编程大哥向我介绍了Bokeh来进行绘图,一直是根据自己的需求来进行对其探索,今儿个看到一篇博文,对Bokeh进行了详细的解说,做个笔记 ...

  6. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】

    任意门:http://hihocoder.com/problemset/problem/1828 Saving Tang Monk II 时间限制:1000ms 单点时限:1000ms 内存限制:25 ...

  7. Photoshop 画布的渐变填充

    之前丢掉的要开始慢慢的捡起来,因为学如逆水行舟,不进则退.古人诚不欺我等. 1.新建图层,或者就在当前图层进行操作,选择图层 2.工具箱---1渐变工具---2径向渐变---模式--正常.不透明100 ...

  8. HTML5之转动的轮子

    <!doctype html><html> <head></head> <body> <canvas width="1000 ...

  9. python之yield表达式

    yield表达式用于generator function 调用generator function时,返回一个iterator(函数内语句不被会执行),调用iterator函数时,执行到yield表达 ...

  10. 如何在Vue中使用Mockjs模拟数据的增删查改

    之前一直使用json-server在前端开发时,搭建本地数据接口测试,但有时又需要将做好的项目放于 github page上做项目演示.在本地时,json server很好使用,但一旦放在github ...