hdu 5113 Black And White
http://acm.hdu.edu.cn/showproblem.php?pid=5113
题意:给你n*m的格子,然后在每个格子内涂色,相邻格子不能同色,然后给你每个颜色涂的格子的固定个数,然后可不可以实现,可以实现输出任意一种,否则输出NO
思路:dfs枚举,剪纸,每种颜色剩余的个数不能超过剩余格子数的一半,如果剩余格子数是奇数,不能超过一半加1,偶数是一半。
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 100
using namespace std; struct node
{
int c;
int id;
bool operator<(const node &a)const
{
return c>a.c;
}
}p[];
int t,n,m,k;
int c[maxn];
int g[][];
bool flag1; void dfs(int cc)
{
if(flag1) return;
if(cc>=n*m) return ;
for(int i=; i<=k; i++)
{
if((n*m-cc)%==)
{
if(p[i].c>(n*m-cc)/) return;
}
else
{
if(p[i].c>(n*m-cc)/+) return;
}
}
int x=cc/m;
int y=cc%m;
for(int i=; i<=k; i++)
{
if((g[x-][y]==p[i].id&&x->=)||(g[x][y-]==p[i].id&&y->=)) continue;
if(p[i].c==) continue;
g[x][y]=p[i].id;
p[i].c--;
dfs(cc+);
p[i].c++;
if(cc==n*m-)
{
flag1=true;
printf("YES\n");
for(int xx=; xx<n; xx++)
{
for(int yy=; yy<m; yy++)
{
if(yy==) printf("%d",g[xx][yy]);
else printf(" %d",g[xx][yy]);
}
printf("\n");
}
}
}
} int main()
{
scanf("%d",&t);
for(int cas=; cas<=t; cas++)
{
scanf("%d%d%d",&n,&m,&k);
for(int i=; i<=k; i++)
{
scanf("%d",&c[i]);
p[i].c=c[i];
p[i].id=i;
}
sort(p+,p+k+);
bool flag=true;
for(int i=; i<k; i++)
{
if((n*m)%==)
{
if(c[i]>(n*m/))
{
flag=false;
break;
}
}
else
{
if(c[i]>((n*m)/+))
{
flag=false;
break;
}
}
}
printf("Case #%d:\n",cas);
if(!flag)
{
printf("NO\n");
continue;
}
flag1=false;
dfs();
if(!flag1) printf("NO\n");
}
return ;
}
hdu 5113 Black And White的更多相关文章
- HDU 5113 Black And White 回溯+剪枝
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5113 Black And White Time Limit: 2000/2000 MS (Java/ ...
- [HDU 5113] Black And White (dfs+剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5113 题目大意:给你N*M的棋盘,K种颜色,每种颜色有c[i]个(sigma(c[i]) = N*M) ...
- 搜索(剪枝优化):HDU 5113 Black And White
Description In mathematics, the four color theorem, or the four color map theorem, states that, give ...
- HDU 5113 Black And White ( 2014 北京区预赛 B 、搜索 + 剪枝 )
题目链接 题意 : 给出 n * m 的网格.要你用 k 种不同的颜色填给出的网格.使得相邻的格子颜色不同.若有解要输出具体的方案 分析 : 看似构造.实则搜索.手构构半天没有什么好想法 直接搜就行了 ...
- hdu 3911 Black And White(线段树)
题目连接:hdu 3911 Black And White 题目大意:给定一个序列,然后有M次操作: 0 l r:表示询问l,r中最大连续1的个数 1 l r:表示将l,r区间上的数取反 解题思路:线 ...
- HDU 5113
HDU 5113类似四色定理的什么东西,大体就是dfs了,不过有两个坑点,这个题的逼格瞬间就上去了1.剪枝很神奇,任何一种颜色都不能超过剩下总格子数的一半,想想确实显然但是比赛的时候没有想到:2.测评 ...
- Hdu OJ 5113 Black And White (2014ACM/ICPC亚洲区北京站) (搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5113 题目大意:有k种颜色的方块,每种颜色有ai个, 现在有n*m的矩阵, 问这k种颜色的方块能否使任 ...
- HDU 5113:Black And White(DFS)
题目链接 题意 给出一个n*m的图,现在有k种颜色让你对这个图每个格子染色,每种颜色最多可以使用col[i]次,问是否存在一种染色方案使得相邻格子的颜色不同. 思路 以为是构造题,结果是爆搜.对于每一 ...
- HDU 3911 Black And White 分段树 题解
Problem Description There are a bunch of stones on the beach; Stone color is white or black. Little ...
随机推荐
- 在hibernate中使用SQL语句
- 网络子系统43_ip选项预处理
//选项格式: // 1.type中指示该选项在分片时是否需要被拷贝 // 2.ptr从1算起,1为type的位置 // 3.len不包括type字段,其余都包括(len,ptr,选项内容) //ty ...
- vim 语法高亮
1 .配置文件的位置 在文件夹 /etc/ 以下.有个名为vimrc 的文件.这是系统中公共的vim配置文件.对全部用户都有效.而在每一个用户的主文件夹下,都能够自己建立私有的配置文件,命名为:&qu ...
- [RxJS] Utility operator: do
We just saw map which is a transformation operator. There are a couple of categories of operators, s ...
- Java语言基础(四)
Java语言基础(四) 一.基本数据类型(8) byte 8位 使用较少,一般用于网络传输: -128-+127 short 16位 不常用 -32768-+32767 int 32位 常用 ...
- iOS--RunLoop原理介绍
什么是RunLoop RunLoop从字面上看是运行循环的意思,这一点也不错,它确实就是一个循环的概念,或者准确的说是线程中的循环. 本文一开始就提到有些程序是一个圈,这个圈本质上就是这里的所谓的Ru ...
- SQLite查询优化性能要点
Sqlite是轻量级的,在编译之后很小,其中一个原因就是在查询优化方面比较简单,它只是运用索引机制来进行优化的,经过对SQLite的查询优化的分析以及对源代码的研究,我将SQLite的查询优总结如下: ...
- StructureMap Exception Code: 207 Internal exception while creating Instance '06fc8bd7-76db-47c1-8d71-31090a074f5e' of PluginType QIMS.Repository.IComStaffRepository. Check the inner exception for more
标题翻译: StructureMap异常代码:207内部异常,同时创造PluginType QIMS.Repository.IComStaffRepository的实例“06fc8bd7-76db-4 ...
- ASP.NET MVC 中 ActionResult 和 ViewResult 在使用上的区别
如果确认你返回的是一个视图(view),你可以直接返回类型为ViewResult. 如果你并不是很清楚,或者你根本不想去理解这些东西,你可以直接返回ActionResult
- Axiom3D学习日记 1.程序配置
1.需要引用的库 Axiom Axiom.Framework Axiom.Platforms.Win32 Axiom.Plugins.FreeImageCodecs Axiom.Plugins.Par ...