哇很好的一道題目誒;
和那個八皇后很像的,但是八皇后是一年前做的題了;
這個我們搜尋就算了,雖然用一些技巧也不是說過不去;
我們dp吧;
但是這個影象我們顯然是不可以dp的;
那我們轉化一下;
圖是從某大佬部落格上盜來的…….
因為是橫豎關係,所以平移一點影響都沒有;
但是你平移成這樣,就可以dp了;
f[i,j]:=f[i,j]+f[k,j-1]*(len[i]-(j-1)) [j-1<=k<=i-1]方程說明:
1.f[i,j]表示前i列放置j個的方案,且第j個放在第i列上,
2.前面f[k,j-1]個都需要累加上來,舉乙個說明為什麼需要累加:對於前4排放置2個的情況(平移後的),2個即可以放在第一列和第三列,也可以放在第一列和第四列,所以需要把這些分布在不同列的情況累加上來。
3.乘(len[i]-(j-1))是因為前面k列放了j-1個棋子了,然後每行只能放乙個棋子,所以第j個棋子在第i列可以放的情況就是len[i]-(j-1),len[i]是第i列有多少行,程式中是l[i]
#include
using namespace std;
int f[1000][1000];
int l[1000],top;
int n,m,ans;
int main()
l[1]=l[2]=1;top=2;
while(l[top]*2-1)
top--;
f[0][0]=1;
for(int i=1;i<=top;i++)
for(int j=1;j<=min(m,l[i]);j++)
for(int k=j-1;k<=i-1;k++)
f[i][j]=(f[i][j]+f[k][j-1]*(l[i]-j+1))%504;
for(int i=1;i<=top;i++)ans=(ans+f[i][m])%504;
printf("%d",ans);
}
洛谷 P1240 諸侯安置
題目描述 很久以前,有乙個強大的帝國,它的國土成正方形狀,如圖所示。這個國家有若干諸侯。由於這些諸侯都曾立下赫赫戰功,國王準備給他們每人一塊封地 正方形中的一格 但是,這些諸侯又非常好戰,當兩個諸侯位於同一行或同一列時,他們就會開戰。如下圖2 3為n 3時的國土,陰影部分表示諸侯所處的位置。前兩幅圖...
洛谷P1240 諸侯安置 遞推
題目大意 有一片正方形狀 旋轉45 看 的國土,有m個諸侯需要安置。諸侯在同一行或同一列上會互相傷害0.0,求出合理安置諸侯 使諸侯兩兩之間都不能攻擊 的方案數對504取模的結果。n 100,k 2n2 2n 1 這張圖中上面第一幅圖為n 3的國土分布。下面前兩幅圖中兩個諸侯會互相攻擊,而第三幅圖不...
洛谷P1052 過河 dp
題目大意 獨木橋長度l,橋上有m個石頭,要過橋,起點0,只要跳到或者跳過l都算過了,每次跳躍距離是s t之間的整數值,問跳過橋最少需要踩到的石子數 dp i 表示跳躍了距離i,最少需要踩到的石子數。stone i 表示在距離i有無石頭。狀態轉移方程 dp i min dp i dp i j ston...