hdu 5113(2014北京—搜索+剪枝)
题意:有N*M的棋盘,用K种颜色去染,要求相邻块不能同色。已知每种颜色要染的块数,问能不能染,如果能,输出任一种染法。
最开始dfs失败了- -,优先搜索一行,搜完后进入下一列,超时。本来以为搜索不行,看别人给的思路就是搜索+剪枝。
但是一直不知道该怎么剪,看了解题报告才发现,剩下的格子的数量+1必需是剩余最多种类棋子的两倍,否则必定会有相邻存在。
例如 3*3的空格中,一类棋子最多只能占5个、
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; int num[20];
int tmap[10][10];
int n,m,k;
bool dfs(int x,int y)
{
for(int i = 1; i <= k; i++)
if((n*m-(m*(x-1)+y-1)+1)/2<num[i])
return false;
for(int i = 1; i <= k; i++)
{
bool flag = true;
if(y - 1>= 1)
{
if(tmap[x][y-1] == i)
flag = false;
}
if(x - 1>= 1)
{
if(tmap[x-1][y] == i)
flag = false;
}
if(num[i] > 0 && flag)
{
tmap[x][y] = i;
num[i]--;
if(x == n && m == y)
return true;
if(y + 1 <= m)
{
if(dfs(x,y+1))
return true;
}
else
{
if(x + 1 <= n)
if(dfs(x+1,1))
return true;
}
num[i]++;
tmap[x][y] = -1;
}
}
return false;
} int main()
{
int T;
scanf("%d",&T);
int cas = 1;
while(T--)
{
scanf("%d%d%d",&n,&m,&k);
for(int i = 1; i <= k; i++)
scanf("%d",&num[i]);
memset(tmap,-1,sizeof(tmap));
printf("Case #%d:\n",cas++);
if(dfs(1,1))
{
printf("YES\n");
for(int i=1; i<=n; i++)
{
for(int j=1; j<m; j++)
printf("%d ",tmap[i][j]);
printf("%d\n",tmap[i][m]);
}
}
else
printf("NO\n");
}
return 0;
}
hdu 5113(2014北京—搜索+剪枝)的更多相关文章
- HDU 5113--Black And White(搜索+剪枝)
题目链接 Problem Description In mathematics, the four color theorem, or the four color map theorem, stat ...
- hdu 5119(2014北京)
题意: 随机选择一个数,如果后面有比他小的就进行交换,直到没有为止(算一轮).求多少轮后为递增序列 思路: 倒着找,如果有比经过的最小数大的,ans+1 #include <iostream&g ...
- hdu 5112 (2014北京现场赛 A题)
给出某个时刻对应的速度 求出相邻时刻的平均速度 输出最大值 Sample Input23 // n2 2 //t v1 13 430 31 52 0 Sample OutputCase #1: 2.0 ...
- [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 5469 Antonidas(树的分治+字符串hashOR搜索+剪枝)
题目链接:hdu 5469 Antonidas 题意: 给你一颗树,每个节点有一个字符,现在给你一个字符串S,问你是否能在树上找到两个节点u,v,使得u到v的最短路径构成的字符串恰好为S. 题解: 这 ...
- hdu 5887 搜索+剪枝
Herbs Gathering Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 5113
HDU 5113类似四色定理的什么东西,大体就是dfs了,不过有两个坑点,这个题的逼格瞬间就上去了1.剪枝很神奇,任何一种颜色都不能超过剩下总格子数的一半,想想确实显然但是比赛的时候没有想到:2.测评 ...
- NOIP2015 斗地主(搜索+剪枝)
4325: NOIP2015 斗地主 Time Limit: 30 Sec Memory Limit: 1024 MBSubmit: 270 Solved: 192[Submit][Status] ...
- luogu 1731 搜索剪枝好题
搜索剪枝这个东西真的是骗分利器,然鹅我这方面菜的不行,所以搜索数学dp三方面是真的应该好好训练一下 一本通的确该认真的刷嗯 #include<bits/stdc++.h> using na ...
随机推荐
- Java NIO之选择器
1.简介 前面的文章说了缓冲区,说了通道,本文就来说说 NIO 中另一个重要的实现,即选择器 Selector.在更早的文章中,我简述了几种 IO 模型.如果大家看过之前的文章,并动手写过代码的话.再 ...
- 在WebStorm中启动Angular项目
点击配置 创建 选择命令 package.json 运行 查看运行结果
- Mego开发文档 - 快速开始
Mego 快速开始 我们将创建一个简单的数据新增及查询来演示 Mego 的使用过程.演示中都是使用 Visual Studio 2017 作为开发工具,SQL Server 2012 作为数据库. 创 ...
- 获取apk项目的MD5值和SHA1值
一些可说可不说的话: * 以前有一个更简单的方法,在as的右边工具栏的 gradle 面板中可以很方便的获取到: * 上次用也是在2年前,时间长了给忘记了,不过我记得我当时写了笔记,这会笔记不在身边, ...
- angular2 学习笔记 ( unit test 单元测试 )
第一次写单元测试. 以前一直都有听说 TDD 的事情. 今天总算是去尝试了一下. 先说说 TDD 的想法, 是这样的, 开发项目的流程 : 确定需求 -> 写类,接口,方法的名字(不写具体实现代 ...
- SpringBoot入门:新一代Java模板引擎Thymeleaf(实践)
菜鸟教程:http://www.runoob.com/ http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js http://apps.b ...
- Linux实战案例(6)yum查找、卸载、和安装软件
0.查找要安装的软件名字 yum search iostat就能查到以及iostat相干的安装包了, 别的想安装一个程序,只记得一部门名称,也可以用这个措施来实现安装 yum search png | ...
- python flask框架 数据库的使用
#coding:utf8 from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # ...
- CentOS 7下安装Chrome浏览器
1. cd /etc/yum.repos.d/ 2. vim google-chrome.repo 在该文件中输入: [google-chrome]name=google-chromebaseurl= ...
- spring cloud zipkin sleuth与spring boot aop结合后,启动慢
问题描述: 引入了spring cloud的监控starter,间接引入jooq. 又引入了 spring-boot-starter-web,所以间接引入aop. 参考下面资料后:https://gi ...