時間限制: 1000 ms 記憶體限制: 524288 kb
原題來自:usaco 2006 nov. gold
farmer john 新買了一塊長方形的牧場,這塊牧場被劃分成 m
'>m
行 n'>
n 列 (1≤m
≤12;1
≤n≤12
'>1≤m≤12;1≤n≤12
),每一格都是一塊正方形的土地。fj 打算在牧場上的某幾格土地裡種上美味的草,供他的奶牛們享用。遺憾的是,有些土地相當的貧瘠,不能用來放牧。並且,奶牛們喜歡獨佔一塊草地,於是 fj 不會選擇兩塊相鄰的土地,即:沒有哪兩塊草地有公共邊。當然,fj 還沒有決定在哪些土地上種草。
作為乙個好奇的農場主,fj 想知道,如果不考慮草地的總塊數,那麼,一共有多少種種植方案可供他選擇。當然,把新的牧場荒廢,不在任何土地上種草,也算一種方案。請你幫 fj 算一下這個總方案數。
第 1'>
1 行:兩個正整數 m
'>
m 和 n
'>
n,用空格隔開;
第 2'>2
到 m+
1'>
m+1 行:每行包含 n
'>n
個用空格隔開的整數,描述了每塊土地的狀態。輸入的第 i+1
'>
i+1 行描述了第 i
'>
i 行的土地。所有整數均為 0
'>
0 或 1
'>1
,1'>
1 表示這塊土地足夠肥沃,0
'>
0 則表示這塊地上不適合種草。
第 1'>
1 行:輸出乙個整數,即牧場分配總方案數除以 10
8'>
108 的餘數。
2 31 1 1
0 1 0
9樣例說明
按下圖把各塊土地編號:
1 2 3只開闢一塊草地有 40 4 0
'>
4 種方案:選 1,2
,3,4
'>
1,2,3,4 中的任一塊。開闢兩塊草地的話,有 3
'>3
種方案:13,14
'>
13,14 以及 34
'>
34。選三塊草地只有一種方案:134
'>
134。再加把牧場荒廢的那一種,總方案數為 4+3
+1+1
=9'>
4+3+1+1=9 種。1≤
n,m≤
12'>
1≤n,m≤12。1≤
n,m≤
12'>sol:這是一道狀壓dp(廢話),由於我借鑑了自己國王的思路,光榮的變成最差解(時間和空間都是最劣的),dp[i][j][k]表示到第i行,放了j個牧草,這行的狀態為k,暴力預處理+超暴力轉移
#include usingview codenamespace
std;
typedef
intll;
inline ll read()
while
(isdigit(ch))
return (f)?(-s):(s);
}#define r(x) x=read()inline
void
write(ll x)
if(x<10
)
write(x/10
); putchar((x%10)+'0'
);
return;}
inline
void
writeln(ll x)
#define w(x) write(x),putchar(' ')
#define wl(x) writeln(x)
const
int mod=100000000
;int n,m,dp[15][12*12+5][(1
<<12)+5
];int zhuangt[15],ges[(1
<<12)+5
];bool jud[(1
<<12)+5],can[(1
<<12)+5][(1
<<12)+5
];int
main()
}for(i=0;i
for(i=0;i
(jud[i])
if(bo) can[i][j]=1
; }
}for(i=0;i
;
for(i=2;i<=m;i++)}}
}int ans=0
;
for(i=0;i<=(n*m);i++)
}wl(ans);
return0;
}/*input
2 3
1 1 1
0 1 0
output
9input
1 10
1 1 1 1 1 1 1 1 1 1
output
144*/
一本通 1 1 例 1 活動安排
題目link 貪心即可,將活動按右端點排序,排序後能選則選。o n 證明 首先對於乙個前面都為最優序列的前提下,如果對於乙個活動 a 使它發生是一種最優序列,然後再對於另乙個活動 b 它的結束時間比 a 早,並且開始時間也滿足條件,那麼根據貪心就可以選它,因為它既合法又是一種最優序列。1 inclu...
一本通1608 例 3 任務安排 3
時間限制 1000 ms 記憶體限制 524288 kb 有 n n 個任務排成乙個序列在一台機器上等待執行,它們的順序不得改變。機器會把這 n n 個任務分成若干批,每一批包含連續的若干個任務。從時刻 0 0 開始,任務被分批加工,執行第i個任務所需的時間是 t i ti。另外,在每批任務開始前,...
一本通1664 例 2 取石子遊戲 2
題目描述 有一種有趣的遊戲,玩法如下 玩家 2 人 道具 n 堆石子,每堆石子的數量分別為 x1 x2 xn 規則 遊戲雙方輪流取石子 每人每次選一堆石子,並從中取走若干顆石子 至少取 1 顆 所有石子被取完,則遊戲結束 如果輪到某人取時已沒有石子可取,那此人算負。假如兩個遊戲玩家都非常聰明,問誰勝...