hdu 5113(2014北京 搜尋 剪枝)

2021-07-05 15:07:49 字數 880 閱讀 1929

題意:有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。否則,我們可以將邊進行染色。假設黑色代表兩個人之間是線上朋友,白...