題解 [USACO06NOV]玉米田Corn Fields

Chtholly & Willem

題目描述

Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squares are infertile and can't be planted. Canny FJ knows that the cows dislike eating close to each other, so when choosing which squares to plant, he avoids choosing squares that are adjacent; no two chosen squares share an edge. He has not yet made the final choice as to which squares to plant.
Being a very open-minded man, Farmer John wants to consider all possible options for how to choose the squares for planting. He is so open-minded that he considers choosing no squares as a valid option! Please help Farmer John determine the number of ways he can choose the squares to plant.

農(nóng)場主John新買了一塊長方形的新牧場糊肤,這塊牧場被劃分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一塊正方形的土地。John打算在牧場上的某幾格里種上美味的草毫捣,供他的奶牛們享用棺亭。
遺憾的是穿铆,有些土地相當(dāng)貧瘠彰触,不能用來種草都许。并且褂萧,奶牛們喜歡獨占一塊草地的感覺押桃,于是John不會選擇兩塊相鄰的土地,也就是說导犹,沒有哪兩塊草地有公共邊唱凯。
John想知道羡忘,如果不考慮草地的總塊數(shù),那么磕昼,一共有多少種種植方案可供他選擇卷雕?(當(dāng)然,把新牧場完全荒廢也是一種方案)

輸入輸出格式

輸入格式
第一行:兩個整數(shù)M和N掰烟,用空格隔開爽蝴。
第2到第M+1行:每行包含N個用空格隔開的整數(shù),描述了每塊土地的狀態(tài)纫骑。第i+1行描述了第i行的土地蝎亚,所有整數(shù)均為0或1,是1的話先馆,表示這塊土地足夠肥沃发框,0則表示這塊土地不適合種草。
輸出格式
一個整數(shù)煤墙,即牧場分配總方案數(shù)除以100,000,000的余數(shù)梅惯。

輸入輸出樣例

輸入樣例#1

2 3
1 1 1
0 1 0

輸出樣例#1

9

解題思路

這顯然又是一道狀態(tài)壓縮
根據(jù)題意,我們的狀態(tài)變量就設(shè)為 f [ i ] [ j ] 表示第 i 行種草的狀態(tài)為 j 時的方案數(shù)
那么很顯然仿野,我們的狀態(tài)轉(zhuǎn)移方程就是 f [ i ] [ j ] += f [ i - 1 ] [ k ] 铣减,其中 k 表示的是上一行與狀態(tài) j 不相沖突的一種狀態(tài)
但是我們需要考慮到的是,玉米田中有些位置能種草而有些位置不能脚作,那么我們就需要再預(yù)處理出來一個狀態(tài)數(shù)組 cant [ i ] 表示第 i 行能否種草的狀態(tài)葫哗,在對 f 狀態(tài)轉(zhuǎn)移地時候?qū)τ诿恳粋€狀態(tài) j 就需要判斷一下,如果說( j & cnat [ i ] ) == j 的時候就表示狀態(tài) j 符合第 i 行對能否種草的限制球涛,即可轉(zhuǎn)移
具體實現(xiàn)細(xì)節(jié)見代碼注釋

C++代碼

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

const int maxn=20;
const int mod=1e9;
int n,m,cnt,ans=0;
int cant[maxn];
int f[maxn][1<<13];

inline int read() {//珂朵莉版快讀~~~~
    int chtholly=0,william=1;
    char c=getchar();
    while(c<'0' || c>'9') {
        if(c=='-')william=-1;
        c=getchar();
    }
    while(c<='9' && c>='0') {
        chtholly=chtholly*10+(int)(c-'0');
        c=getchar();
    }
    return chtholly*william;
}

inline bool check(int x) {//檢查狀態(tài)x是否滿足沒有相鄰的位置種草
    return (!((x<<1)&x) && !((x>>1)&x));
}

int main() {
    m=read(),n=read();
    for(int i=1; i<=m; i++)
        for(int j=1; j<=n; j++) {
            int x=read();
            cant[i]=(cant[i]<<1)+x;//預(yù)處理cant數(shù)組
        }
    f[0][0]=1;
    cnt=(1<<n)-1;//預(yù)處理出總共有哪些可能的狀態(tài)
    for(int i=1; i<=m; i++)
        for(int j=0; j<=cnt; j++)
            if(check(j) && (j&cant[i])==j)
                for(int k=0; k<=cnt; k++)
                    if(!(j&k)) f[i][j]+=f[i-1][k];
                    //如果兩種狀態(tài)不相沖突即可轉(zhuǎn)移
    for(int i=0; i<=cnt; i++)
        ans=(ans+f[m][i])%mod;
    printf("%d\n",ans);
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末劣针,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子亿扁,更是在濱河造成了極大的恐慌捺典,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件从祝,死亡現(xiàn)場離奇詭異襟己,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哄褒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門稀蟋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呐赡,你說我怎么就攤上這事退客。” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵萌狂,是天一觀的道長档玻。 經(jīng)常有香客問我,道長茫藏,這世上最難降的妖魔是什么误趴? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮务傲,結(jié)果婚禮上凉当,老公的妹妹穿的比我還像新娘。我一直安慰自己售葡,他們只是感情好看杭,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挟伙,像睡著了一般楼雹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尖阔,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天贮缅,我揣著相機(jī)與錄音,去河邊找鬼介却。 笑死谴供,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的齿坷。 我是一名探鬼主播憔鬼,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胃夏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昌跌,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤仰禀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蚕愤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體答恶,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年萍诱,在試婚紗的時候發(fā)現(xiàn)自己被綠了悬嗓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡裕坊,死狀恐怖包竹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤周瞎,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布苗缩,位于F島的核電站,受9級特大地震影響声诸,放射性物質(zhì)發(fā)生泄漏酱讶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一彼乌、第九天 我趴在偏房一處隱蔽的房頂上張望泻肯。 院中可真熱鬧,春花似錦慰照、人聲如沸灶挟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膏萧。三九已至,卻和暖如春蝌衔,著一層夾襖步出監(jiān)牢的瞬間榛泛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工噩斟, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留曹锨,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓剃允,卻偏偏與公主長得像沛简,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子斥废,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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