這幾天考試,在考試中有這樣一道題叫「諸侯安置」沒過,但事後改對了。
題目:諸侯安置
【問題描述】
很久以前,有乙個強大的帝國,它的國土成正方形狀,如圖1 所示
這個國家有若干諸侯。由於這些諸侯都曾立下赫赫戰功,國王準備給他們每人一塊封地
(正方形中的一格)。但是,這些諸侯又非常好戰,當兩個諸侯位於同一行或同一列時,他們
就會開戰。如下圖2 為n=3 時的國土,陰影部分表示諸侯所處的位置。前兩幅圖中的諸侯可
以互相攻擊,第三幅則不可以。
國王自然不願意看到他的諸侯們互相開戰,致使國家動盪不安。因此,他希望通過
合理的安排諸侯所處的位置,使他們兩兩之同都不能攻擊。
現在,給出正方形的邊長n,以及需要封地的諸侯數量k,要求你求出所有可能的安置
方案數。(n≤100,k≤2n2-2n+1)
由於方案數可能很多,你只需要輸出方案數除以504 的餘數即可。
【輸入】
僅一行,兩個整數n 和k,中閽用一空格隔開。
【輸出】
乙個整數,表示方案數除以504 的餘數。
【樣例】
empire.in empire.out
2 2 4
本題我們先寫dp做法,我們可以設定乙個dp陣列,讓他的第一維來表示到第幾列了,第二維表示能放幾個諸侯。我們使列每次從左向右加一,由此得到每一列前最多能放多少個諸侯。而列的總數是n*2-1。在這要特別提醒大家,當i為奇數是最多有i種情況,可當i為偶數時卻只有i-1種情況。
#include#includeusing namespace std;
int n,empire,ans = 0;
int territory[250][250],q[250];
int p;
void init()
if(empire>=2*n-1)
p = n*2-1;//最多能有多少列
for(int i = 1;i <= p; i++)
else }}
void work()
} }for(int i = empire;i < 2*n-1; i++)
}int main()
諸侯安置(暴力搜尋)
題目 諸侯安置 問題描述 很久以前,有乙個強大的帝國,它的國土成正方形狀,如圖1 所示 這個國家有若干諸侯。由於這些諸侯都曾立下赫赫戰功,國王準備給他們每人一塊封地 正方形中的一格 但是,這些諸侯又非常好戰,當兩個諸侯位於同一行或同一列時,他們 就會開戰。如下圖2 為n 3 時的國土,陰影部分表示諸...
dp 洛谷P1240 諸侯安置
哇很好的一道題目誒 和那個八皇后很像的,但是八皇后是一年前做的題了 這個我們搜尋就算了,雖然用一些技巧也不是說過不去 我們dp吧 但是這個影象我們顯然是不可以dp的 那我們轉化一下 圖是從某大佬部落格上盜來的 因為是橫豎關係,所以平移一點影響都沒有 但是你平移成這樣,就可以dp了 f i,j f i...
諸侯安置 簡單的遞推
problem description 很久以前,有乙個強大的帝國,它的國土呈正方形狀 45度看 如圖所示。這個國家有若干諸侯。由於這些諸侯都曾立下赫赫戰功,國王準備給他們每人一塊封地 正方形中的一格 但是,這些諸侯又非常好戰,當兩個諸侯位於同一行或同一列時,他們就會開戰。如下圖為n 3時的國土,陰...