題解 [SCOI2005] 互不侵犯King (狀壓DP)

Chtholly Nota Seniorious

題目描述

在N×N的棋盤里面放K個國王咖杂,使他們互不攻擊宫静,共有多少種擺放方案。國王能攻擊到它上下左右柿究,以及左上左下右上右下八個方向上附近的各一個格子邮旷,共8個格子。

輸入輸出格式

輸入格式
只有一行蝇摸,包含兩個數(shù)N婶肩,K ( 1 <=N <=9, 0 <= K <= N * N)
輸出格式
所得的方案數(shù)

輸入輸出樣例

輸入樣例#1

3 2

輸出樣例#1

16

解題思路

很典型的一道狀態(tài)壓縮DP的題,我們只需要枚舉N行中每一行的狀態(tài)即可貌夕,如果此行的狀態(tài)與上一行的狀態(tài)不相沖突即可轉移
故我們維護的狀態(tài)變量即為f[ i ][ j ][ k ]表示在第 i 行放了 j 個國王律歼,此時這一行的狀態(tài)為 k (k 中 1 表示放, 0 表示不放)此時的方案數(shù)
那么我們在狀態(tài)轉移時只需要把上一行可能的狀態(tài)能夠得到的方案數(shù)加起來即可
以下是C++代碼啡专,詳細細節(jié)看注釋

C++代碼

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

typedef long long ll;
ll n,cnt,k;//cnt為一行中最大狀態(tài)
ll f[15][110][1<<9],c[1<<9],ans=0;//c[i]表示在i狀態(tài)下的國王數(shù)

inline ll read(){//快讀不解釋
    ll Forca=0,Barca=1;
    char c=getchar();
    while(c<'0' || c>'9'){
        if(c=='-')
            Barca=-1;
        c=getchar();
    }
    while(c<='9' && c>='0'){
        Forca=Forca*10+(ll)(c-'0');
        c=getchar();
    }
    return Forca*Barca;
}

inline bool check(ll x,ll y){//判斷兩種狀態(tài)是否沖突
    if((x&y)!=0) return 0;//狀態(tài)x與狀態(tài)y之間有位置相同的國王险毁,沖突
    if((x&(x<<1))>0) return 0;//狀態(tài)x本身有相鄰國王,沖突
    if((y&(y<<1))>0) return 0;//狀態(tài)y本身有相鄰國王,沖突
    if((x&(y<<1))>0) return 0;//狀態(tài)x中有國王在狀態(tài)y中國王的左下畔况,沖突
    if((y&(x<<1))>0) return 0;//狀態(tài)y中有國王在狀態(tài)x中國王的右下鲸鹦,沖突
    return 1;//不符合一切沖突條件,即不沖突
}

int main(){
    n=read(),k=read();
    cnt=(1<<n)-1;//處理出最大狀態(tài)跷跪,即為2^n-1
    for(int i=1;i<=cnt;i++)
        c[i]=c[i>>1]+(i&1);//預處理c馋嗜,位運算加速
    f[0][0][0]=1;
    for(int i=1;i<=n;i++)
        for(int j=0;j<=cnt;j++)//j為本行狀態(tài)
            for(int t=0;t<=cnt;t++)//t為上一行狀態(tài)
                if(check(j,t)){//兩個狀態(tài)不相沖突即可轉移
                    for(int cc=c[j]+c[t];cc<=k;cc++)//枚舉可能放的國王數(shù)
                        f[i][cc][j]=f[i][cc][j]+f[i-1][cc-c[j]][t];
                }
    for(int i=0;i<=cnt;i++)
        ans+=f[n][k][i];
        //把總共n行中共放了k個國王時所有可能的狀態(tài)能夠取到的方案加和即為答案
    cout<<ans<<endl;
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吵瞻,隨后出現(xiàn)的幾起案子葛菇,更是在濱河造成了極大的恐慌,老刑警劉巖橡羞,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眯停,死亡現(xiàn)場離奇詭異,居然都是意外死亡尉姨,警方通過查閱死者的電腦和手機庵朝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來又厉,“玉大人九府,你說我怎么就攤上這事「仓拢” “怎么了侄旬?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長煌妈。 經(jīng)常有香客問我儡羔,道長,這世上最難降的妖魔是什么璧诵? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任汰蜘,我火速辦了婚禮,結果婚禮上之宿,老公的妹妹穿的比我還像新娘族操。我一直安慰自己,他們只是感情好比被,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布色难。 她就那樣靜靜地躺著,像睡著了一般等缀。 火紅的嫁衣襯著肌膚如雪枷莉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天尺迂,我揣著相機與錄音笤妙,去河邊找鬼冒掌。 笑死,一個胖子當著我的面吹牛危喉,可吹牛的內(nèi)容都是我干的宋渔。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼辜限,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了严蓖?” 一聲冷哼從身側響起薄嫡,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颗胡,沒想到半個月后毫深,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡毒姨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年哑蔫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弧呐。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡闸迷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俘枫,到底是詐尸還是另有隱情腥沽,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布鸠蚪,位于F島的核電站今阳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茅信。R本人自食惡果不足惜盾舌,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蘸鲸。 院中可真熱鬧妖谴,春花似錦、人聲如沸棚贾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妙痹。三九已至铸史,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怯伊,已是汗流浹背琳轿。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崭篡。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓挪哄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親琉闪。 傳聞我的和親對象是個殘疾皇子迹炼,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 樹形動態(tài)規(guī)劃,顧名思義就是樹+DP颠毙,先分別回顧一下基本內(nèi)容吧:動態(tài)規(guī)劃:問題可以分解成若干相互聯(lián)系的階段斯入,在每一個...
    Mr_chong閱讀 1,491評論 0 2
  • 生活大爆炸版石頭剪刀布 題目描述 石頭剪刀布是常見的猜拳游戲:石頭勝剪刀,剪刀勝布蛀蜜,布勝石頭刻两。如果兩個人出拳一樣,...
    bbqub閱讀 455評論 0 0
  • ??? ??? ? ??? ??? ? Girl you always pick me up ???? ? ?? ...
    LIU_BingBing閱讀 413評論 0 0
  • 文/騎馬上岸的人 四月的城市煙火濃稠 把黃昏的一邊遮蓋 我從暗淡云朵里 摘下一朵緋紅的花 薄霧惺忪的睡眼中 花朵一...
    騎馬上岸的人閱讀 524評論 14 43
  • 鏖戰(zhàn)秋闈時運通滴某,鹓鵬振翅上宸宮磅摹。賺來京洛麒麟冢,都付蒼煙落照中霎奢。 閑枰戲户誓,杖青筇。流徽協(xié)韻老髯翁椰憋。亭皋拚卻飛熊夢厅克,...
    梅零落閱讀 291評論 2 0