9267:核電站
總時間限制: 5000ms 單個測試點時間限制: 1000ms 記憶體限制: 131072kb
描述 乙個核電站有n個放核物質的坑,坑排列在一條直線上。如果連續m個坑中放入核物質,則會發生**,於是,在某些坑中可能不放核物質。
任務:對於給定的n和m,求不發生**的放置核物質的方案總數
輸入 只一行,兩個正整數n,m( 1 < n < 50,2 ≤ m ≤ 5 )
輸出 乙個正整數s,表示方案總數。
樣例輸入
4 3
樣例輸出
13題解:維護乙個二維陣列f,f[
i][1
] 表示前i個坑,第i個坑放的方案數,f[
i][0
] 表示前i個坑,第i個坑不放的方案數。
首先,f[i
][0]
=f[i
−1][
0]+f
[i−1
][1]
(1≤i
≤n) 因為若第i個不放那麼隨便放,沒有任何限制。
若第i個坑放,那麼有三種情況:f[
i][1
]=⎧⎩
⎨⎪⎪f
[i−1
][1]
+f[i
−1][
0](i
f[i−
1][1
]+f[
i−1]
[1]−
1(i==
m)f[
i−1]
[1]+
f[i−
1][0
]−f[
i−m]
[0](
i>m)
⎫⎭⎬⎪
⎪ 1.若i
<
m 那麼無論放不放都不會**
2.若i==m
那麼該坑放的話前面肯定有不能放的坑,所以少了一種全部都放的情況,所以−1
。 3.若i
>
m 那麼該點放的話,第i−
m 的坑之間必須有不放的坑,那麼前去f[
i−m]
[0] 的方案數。
**:
#include
#include
using
namespace
std;
long
long n,m,f[55][2];
int main()
f[m][0]=f[m-1][0]+f[m-1][1];
f[m][1]=f[m-1][0]+f[m-1][1]-1;
for (i=m+1;i<=n;i++)
printf("%lld",f[n][1]+f[n][0]);
}
OpenJudge9267 遞推 核電站
乙個核電站有n個放核物質的坑,坑排列在一條直線上。如果連續m個坑中放入核物質,則會發生 於是,在某些坑中可能不放核物質。任務 對於給定的n和m,求不發生 的放置核物質的方案總數 只一行,兩個正整數n,m 1 n 50,2 m 5 乙個正整數s,表示方案總數。4 313 dp i 表示到第i個坑的方案...
神奇的動態規劃 核電站 openjudge
9267 核電站 總時間限制 5000ms 單個測試點時間限制 1000ms 記憶體限制 131072kb 描述 乙個核電站有n個放核物質的坑,坑排列在一條直線上。如果連續m個坑中放入核物質,則會發生 於是,在某些坑中可能不放核物質。任務 對於給定的n和m,求不發生 的放置核物質的方案總數 輸入 只...
核電站問題
乙個核電站有n個放核物質的坑,坑排列在一條直線上。如果連續m個坑中放入核物質,則會發生 於是,在某些坑中可能不放核物質。任務 對於乙個核電站有n個放核物質的坑,坑排列在一條直線上。如果連續m個坑中放入核物質,則會發生 於是,在某些坑中可能不放核物質。任務 對於給定的n和m,求不發生 的放置核物質的方...