OpenJudge9267 核電站 動態規劃

2021-07-24 16:34:14 字數 1364 閱讀 9272

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,求不發生 的放置核物質的方...