RPG塗色難題

2021-08-14 12:08:00 字數 1060 閱讀 6070

//有排成一行的n個方格,用紅(red)、粉(pink)、綠(green)三色塗每個格仔,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.

//求全部的滿足要求的塗法.以上就是著名的rpg難題.

假設要填第n格,那麼有兩種情況:

1.第n-1格和第一格不同顏色;

2.第n-1格和第一格相同顏色。

情況1:塗好n-1格有f(n-1)種可能。這個時候第n格只有一種可能,所以共有f(n-1)種可能。

情況2:第n格只要和第1格或者第n-1格顏色不同即可。而n-2格和第n-1格顏色一定不同,此時塗好n-2格有f(n-2)種可能。

而此時,第n格可以有兩種可能,所以有2*f(n-2)種可能。

上面兩種情況綜合起來則有:f(n)=f(n-1)+2*f(n-2);(f(2)=6;f(3)=6;)

暴力搜尋:

#include #include #include #include using namespace std;

long long ans;

int n,x[50];

void dfs(int dep)

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

}int main()

{ scanf("%d",&n);

ans=0;

dfs(1);

cout<

1.第n格為黑色,那麼n-1格必須為白色

2.第n格為白色,n-1格可以是白色,也可以是黑色

情況1:有f(n-1)種可能。

情況2:n-1格為黑色時,n-2格必須為白色,則有f(n-2)種可能。

遞推公式為f(n)=f(n-1)+f(n-2);f(1)=2;f(2)=3;

暴力搜尋:

#include #include #include #include #include using namespace std;

int x[10],ans,n;

void dfs(int dep)

{ if (dep>n)

{ ans++;

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

遞推和遞迴 RPG難題

人稱 ac女之殺手 的超級偶像lele最近忽然玩起了深沉,這可急壞了眾多 cole lele的粉絲,即 可樂 經過多方打探,某資深cole終於知道了原因,原來,lele最近研究起了著名的rpg難題 有排成一行的 個方格,用紅 red 粉 pink 綠 green 三色塗每個格仔,每格塗一色,要求任何...

遞推和遞迴 RPG難題

人稱 ac女之殺手 的超級偶像lele最近忽然玩起了深沉,這可急壞了眾多 cole lele的粉絲,即 可樂 經過多方打探,某資深cole終於知道了原因,原來,lele最近研究起了著名的rpg難題 有排成一行的 個方格,用紅 red 粉 pink 綠 green 三色塗每個格仔,每格塗一色,要求任何...

RPG難題(找規律,也開看作DP)

人稱 ac女之殺手 的超級偶像lele最近忽然玩起了深沉,這可急壞了眾多 cole lele的粉絲,即 可樂 經過多方打探,某資深cole終於知道了原因,原來,lele最近研究起了著名的rpg難題 有排成一行的 個方格,用紅 red 粉 pink 綠 green 三色塗每個格仔,每格塗一色,要求任何...