HDU 5113 Black And White(暴力dfs+減枝)
題目大意:給你一個n×m的矩陣,然後給你k種顏色,每種顏色有x種,所有的個數加起來恰好為n×m個。問你讓你對這個矩陣進行染色問你,能不能把所有的小方格都染色,而且相鄰兩個顏色不同。
思路:一開始想的是構造,先按照個數進行排序,列舉每一個位置,貪心的策略先放多的,如果可以全部放下就輸出YES,以及存貯的方案,否則輸出NO,但是有bug,一直不對。。。
正解:dfs暴力列舉每一個點,裸的話需要25!,顯然會超時,需要先排個序用構造的策略,讓多的先放這樣可以減枝。然後再dfs就可以了。
Black And White
Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)Total Submission(s): 800 Accepted Submission(s): 203
Special Judge
Problem Description
In mathematics, the four color theorem, or the four color map theorem, states that, given any separation of a plane into contiguous regions, producing a figure called a map, no more than four colors are required to color the regions
of the map so that no two adjacent regions have the same color.
— Wikipedia, the free encyclopedia
In this problem, you have to solve the 4-color problem. Hey, I’m just joking.
You are asked to solve a similar problem:
Color an N × M chessboard with K colors numbered from 1 to K such that no two adjacent cells have the same color (two cells are adjacent if they share an edge). The i-th color should be used in exactly ci cells.
Matt hopes you can tell him a possible coloring.
— Wikipedia, the free encyclopedia
In this problem, you have to solve the 4-color problem. Hey, I’m just joking.
You are asked to solve a similar problem:
Color an N × M chessboard with K colors numbered from 1 to K such that no two adjacent cells have the same color (two cells are adjacent if they share an edge). The i-th color should be used in exactly ci cells.
Matt hopes you can tell him a possible coloring.
Input
The first line contains only one integer T (1 ≤ T ≤ 5000), which indicates the number of test cases.
For each test case, the first line contains three integers: N, M, K (0 < N, M ≤ 5, 0 < K ≤ N × M ).
The second line contains K integers ci (ci > 0), denoting the number of cells where the i-th color should be used.
It’s guaranteed that c1 + c2 + · · · + cK = N × M .
For each test case, the first line contains three integers: N, M, K (0 < N, M ≤ 5, 0 < K ≤ N × M ).
The second line contains K integers ci (ci > 0), denoting the number of cells where the i-th color should be used.
It’s guaranteed that c1 + c2 + · · · + cK = N × M .
Output
For each test case, the first line contains “Case #x:”, where x is the case number (starting from 1).
In the second line, output “NO” if there is no coloring satisfying the requirements. Otherwise, output “YES” in one line. Each of the following N lines contains M numbers seperated by single whitespace, denoting the color of the cells.
If there are multiple solutions, output any of them.
In the second line, output “NO” if there is no coloring satisfying the requirements. Otherwise, output “YES” in one line. Each of the following N lines contains M numbers seperated by single whitespace, denoting the color of the cells.
If there are multiple solutions, output any of them.
Sample Input
4
1 5 2
4 1
3 3 4
1 2 2 4
2 3 3
2 2 2
3 2 3
2 2 2
Sample Output
Case #1:
NO
Case #2:
YES
4 3 4
2 1 2
4 3 4
Case #3:
YES
1 2 3
2 3 1
Case #4:
YES
1 2
2 3
3 1
Source
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <ctime>
#include <map>
#include <set>
#define eps 1e-9
///#define M 1000100
///#define LL __int64
#define LL long long
///#define INF 0x7ffffff
#define INF 0x3f3f3f3f
#define PI 3.1415926535898
#define zero(x) ((fabs(x)<eps)?0:x)
#define mod 1000000007
using namespace std;
const int maxn = 55;
int mp[10][10];
int n, m, k;
struct node
{
int pos;
int num;
} f[maxn];
inline int read()
{
char ch;
bool flag = false;
int a = 0;
while(!((((ch = getchar()) >= '0') && (ch <= '9')) || (ch == '-')));
if(ch != '-')
{
a *= 10;
a += ch - '0';
}
else
{
flag = true;
}
while(((ch = getchar()) >= '0') && (ch <= '9'))
{
a *= 10;
a += ch - '0';
}
if(flag)
{
a = -a;
}
return a;
}
void write(int a)
{
if(a < 0)
{
putchar('-');
a = -a;
}
if(a >= 10)
{
write(a / 10);
}
putchar(a % 10 + '0');
}
bool dfs(int x, int y)
{
if(x == n) return true;
if(y == m) return dfs(x+1, 0);
for(int i = 0; i < k; i++)
{
if(!f[i].num) continue;
if(x && mp[x-1][y] == i) continue;
if(y && mp[x][y-1] == i) continue;
mp[x][y] = i;
f[i].num--;
if(dfs(x, y+1)) return true;
f[i].num++;
}
return false;
}
bool cmp(node a, node b)
{
return a.num > b.num;
}
int main()
{
int T;
scanf("%d", &T);
int Case = 1;
while(T--)
{
n = read();
m = read();
k = read();
int flag = 0;
int xp = (n*m+1)/2;
for(int i = 0; i < k; i++)
{
f[i].num = read();
f[i].pos = i+1;
if(f[i].num > xp) flag = 1;
}
printf("Case #%d:\n",Case++);
sort(f, f+k, cmp);
if(flag)
{
puts("NO");
continue;
}
dfs(0, 0);
puts("YES");
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m-1; j++) printf("%d ",f[mp[i][j]].pos);
printf("%d\n",f[mp[i][m-1]].pos);
}
continue;
}
}
相關文章
- HDU 5113 Black And White (dfs)
- Black, White and Gray Box SOA Testing Techniques & Patterns
- CF1626E Black and White Tree
- HDU 5726-GCD(暴力+map)GC
- UVALive 7410 && POJ 5583 Kingdom of Black and White (列舉)
- HDU 5536 Chip Factory (暴力 或者 01Trie)
- YT14-HDU-求N^N的個位數(暴力破解版)
- K倍動態減法遊戲 HDU 2486&&POJ 3922遊戲
- CSS white-spaceCSS
- DialogFragment細枝末節Fragment
- HDU 1258Sum It Up(暴力dfs,記住相同的狀態只保留一個)
- Beaglebone Black教程Beaglebone Black的引腳分配
- 美國心理協會:研究顯示暴力遊戲會令男性玩家同情心減少遊戲
- CSS文字:white-space(轉)CSS
- 芝加哥洛約拉大學:研究發現暴力視訊遊戲會令人減少同情心遊戲
- BeagleBone Black教程之BeagleBone Black裝置的連線
- Beaglebone Black教程BeagleBone Black安裝最新系統映像
- POJ 3321 Apple Tree(dfs+樹狀陣列)APP陣列
- CodeForces - 463E Caisa and Tree (dfs+素因子分解)AI
- White Source SAST—資訊保安測試工具AST
- BeagleBone Black教程之BeagleBone Black使用到的Linux基礎Linux
- 8.13(優先佇列貪心維護+打表找規律+對頂堆優先佇列+DFS減枝+貪心dp)佇列
- 暴力破解
- 一枝獨秀的阿里文娛阿里
- C. Black Circles
- Git 的一些使用細枝末節Git
- 原始碼|併發一枝花之CopyOnWriteArrayList原始碼
- api暴力獲取API
- C++暴力指南C++
- 南洋理工:研究發現暴力遊戲與暴力行為無關遊戲
- 什麼是暴力破解?暴力破解的方法有哪些?
- Beaglebone Black教程使用SSH通過USB和因特網連線Beaglebone Black
- 頑固TABLEのtable-layout/white-space
- Black Out for mac (影像模糊工具)Mac
- Ubuntu Black screen after boot splashUbuntuboot
- Red and Black(DFS入門題)
- Development log - red & black (1) (轉)dev
- Development log - red & black (2) (轉)dev