題意:有n*m的棋盤,用k種顏色去染,要求相鄰塊不能同色。已知每種顏色要染的塊數,問能不能染,如果能,輸出任一種染法。
最開始dfs失敗了- -,優先搜尋一行,搜完後進入下一列,超時。本來以為搜尋不行,看別人給的思路就是搜尋+剪枝。
但是一直不知道該怎麼剪,看了解題報告才發現,剩下的格仔的數量+1必需是剩餘最多種類棋子的兩倍,否則必定會有相鄰存在。
例如 3*3的空格中,一類棋子最多只能佔5個、
#include #include #include #include using namespace std;
int num[20];
int tmap[10][10];
int n,m,k;
bool dfs(int x,int y)
if(x - 1>= 1)
if(num[i] > 0 && flag)
else
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
hdu 5120(2014北京 求圓相交)
題意 求環的相交面積 思路 通過畫圖可知,面積 大圓相交面積 大小圓相交面積 2 小小圓相交面積 再通過圓相交模板計算即可 include include include include include using namespace std typedef long long ll define ...
HDU 3683 模擬 搜尋
給出五子棋殘局,判斷三步內是否能分出勝負,玩家為當前該走旗子的顏色,下一步為白棋或黑棋不定。按照順序判斷即可 1 判斷棋盤是否合法,並確定玩家顏色 2 判斷當前玩家顏色是否有乙個必勝點,有玩家則在第一步勝 3 判斷另一方在當前是否有兩個必勝點,若有,則玩家在第二步失敗 4 bfs出玩家是否存在此方案...
hdu 5305 搜尋 剪枝)
題意 有n個人 n 8 每個人有一定數量的朋友,而和朋友的關係是線上朋友或者線下朋友 只能是其中一種 問每個人的線上朋友數量都等於線下朋友數量的方法數有多少。做法 建成乙個圖,如果邊的數目是奇數或者有人的度數是奇數,那個方法數肯定是0。否則,我們可以將邊進行染色。假設黑色代表兩個人之間是線上朋友,白...