獨特的路徑(path)HGOI

2021-08-19 18:11:43 字數 1638 閱讀 6750

問題描述

給定乙個 n*m 的矩形色板,有 k 種不同的顏料,有些格仔已經填上了某種顏色,現在

需要將其他格仔也填上顏色,使得從左上角到右下角的任意路徑經過的格仔都不會出現兩種

及以上相同的顏色。路徑只能沿著相鄰的格仔,且只能向下或者向右。

計算所有可能的方案,結果對 1000000007 (10^9 + 7)求模。

輸入資料

第一行,三個整數 n, m, k (1 ≤ n, m ≤ 1000, 1 ≤ k ≤ 10);

接下來 n 行,每行包含 m 個整數,表示顏色。其中 0 表示未塗色,非 0 表示顏色的編號,

顏色編號為 1 到 k。

輸出資料

一行,乙個整數,表示塗色方案對 1000000007 (10^9 + 7)求模的結果。

輸入樣例 1

2 2 4

0 00 0

輸出樣例 1

48輸入樣例 2

2 2 4

1 22 1

輸出樣例 2

0輸入樣例 3

5 6 10

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

輸出樣例 3

3628800

輸入樣例 4

2 6 10

1 2 3 4 5 6

0 0 0 0 0 0

輸出樣例 4

4096

附上**

#include 

#include

#include

#include

#include

#define mod 1000000007 //最後取摸

using

namespace

std;

int m,n,k;

intmap[12][12],f[11][12];

int color[15];

int log2[1

<<12];

int dfs (int x,int y)

if(x>n)

int fir=-1,temp,zt,ret=0;

zt=f[x][y-1]|f[x-1][y];//zt是x,y前所有用過的顏色

for (int i=(~zt)&((1

<1);i;i-=(i&(-i)))

ret+=fir;//由於第一次已經使用只用過一次的顏色,那麼由組合數學可知其他情況相同 e.g. 3 4 兩種顏色都沒有被用過,而在這個點兩種顏色用的情況是一樣的,那麼可以進行剪枝

}else

ret%=mod;

color[temp]--;//深搜慣例回歸情況}}

return ret;

}int main()

memset(color,false,sizeof(color));

for (int i=1;i<=n;i++)

}int temp=1;

for (int i=1;i<=k;i++)

cout

<1,1);

return

0;}

獨特的骰子

天真的wells認為自己的骰子是獨一無二的。當有人告訴他的骰子很可能在商店裡有很多個時,wells簡直不敢相信自己的小耳朵!那麼問題來了,眼花的wells會告訴你他的獨特的骰子的6個面,然後再告訴你一堆商店裡骰子。問和wells的獨特骰子長得一模一樣的到底有多少個。當然骰子是可以任意旋轉的。第一行乙...

php獨特的語法

今天寫乙個程式的時候遇到乙個很有意思的問題,這個和php獨特的語法有關,首先我們看一下 是怎麼寫的。db mysql connect localhost root ctrip07185419 or die can not connect to databas mysql select db movi...

MapReduce 獨特的思維

很高興來到這個有意思的地方 部落格論壇,當然這也是我的第一篇部落格。根據網上關於mapreduce的一些翻譯及他人的解釋,我對於mapreduce有了一些個人的認識和見解,想在這裡與大家分享和交流一下。mapreduce簡單來說,就是在超大計算機集群組上進行的簡單資料處理模式。首先,mapreduc...