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. apache poi根据模板导出excel

    需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; im ...

  2. 传统数据仓库项目的优化手段 (针对 Oracle+DataStage )

    普通手段 分区,HASH-JOIN,数据仓库函数,物化视图,位图索引等等为大伙在数据仓库常用的技术, 而下面列举的tips为项目中常用的优化手段/技巧,绿色背景highlight的部分属于非常规手段, ...

  3. swift的特性:扩展、协议、泛型

    swift的特性:扩展.协议.泛型 扩展与继承:对象的生长方式: 协议:支持 协议->类型.类型<-协议 的双向抽象: 泛型:

  4. POJ 2942 圆桌骑士

    之前做过这个题目,现在回想起来,又有新的柑橘. 求必须出去的骑士人数. 每一个双连通分量,如果是一个奇圈,那么一定是二分图染色失败. 依次遍历每个双连通分量,但是,对于邻接表中,有一些点不是双连通分量 ...

  5. javaw.exe 和java.exe的区别

    1.java启动的程序是命令行程序或阻塞程序,如果该程序未执行完毕或未被关闭,则所打开的命令行将被阻塞,不能执行其它命令如dir等,可以通过Ctrl+C等方式关闭程序:2.javaw启动的程序是窗口程 ...

  6. win10的host设置

    路径:C:\Windows\System32\drivers\etc\hosts 例如: 127.0.0.1       localhost 10.201.3.177 apmdbm1

  7. Ajax实现异步操作实例_针对JSON格式的请求数据

    最近写了一篇ajax异步操作XML格式的,今天就写关于json格式的. 一.简单了解Json 1. JSON有两种表示结构,对象和数组. 1.1 对象: { key1:value1, key2:val ...

  8. Android学习笔记_5_文件操作

    1.Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. package com.example.servi ...

  9. 微信小程序分包加载

    分包加载 某些情况下,开发者需要将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载. 在构建小程序分包项目时,构建会输出一个或多个功能的分包,其中每个分包小程序必定含有一个主 ...

  10. o'Reill的SVG精髓(第二版)学习笔记——第六章

    第六章:坐标系统变换 想要旋转.缩放或者移动图片到新的位置.可以给对应的SVG元素添加transform属性. 6.1 translate变换 可以为<use>元素使用x和y属性,以在特性 ...