核電站問題 動態規劃

2021-08-21 14:25:34 字數 1558 閱讀 7043

核電站問題

乙個核電站有n個放核物質的坑,坑排列在一條直線上。如果連續m個坑中放入核物質,則會發生**,

於是,在某些坑中可能不放核物質。

任務:對於給定的n和m,求不發生**的放置核物質的方案總數。

輸入描述 input description

輸入檔案只一行,兩個正整數n,m( 2<=n<50,2≤m≤5)

輸出描述 output description

輸出檔案只有乙個正整數s,表示方案總數。

樣例輸入 sample input

4 3樣例輸出 sample output

13題解:

方法一:

從第乙個坑開始放,開始dfs,每個坑都有兩種可能,放或者不放,dfs(i,j)i第i個坑,j前i個坑最後j個坑都填了物質,若j達到m,則次方案不行,若沒有m,繼續

#includeint n,m,ans=0;

int dfs(int i,int j)

int ans=0;

dfs(i+1,0);//第i+1個坑里沒有物質,之後的坑里是否放物質與前面沒有聯絡了

dfs(i+1,j+1);//前i+1個坑中最後連續j+1個坑里都有物質,

}int main()

方二:

dp[n]表示在n個坑中,每個坑都有兩種可能,放或者不放,但不能有連續m個坑里都有物質

從頭開始向後放,每個坑都有兩種可能,放或者不放

開頭前i個連續的坑中都有核物質(0<=i<=m-1),則第i+1個坑必空。 i+1後面的坑再放和前面的就又沒關係了

i=0時的放法為dp[n-1]; 在後n-1個坑中,每個坑都有兩種可能,放或者不放,但不能有連續m個坑里都有物質

i=1時的放法為dp[n-2]; 在後n-2個坑中…………

……………………;

i=m-1時的放法為dp[n-m]。 在後n-m個坑中…………

得dp[n]=dp[n-1]+dp[n-2]+……+dp[n-m] 。

當n<=m-1時:dp[n]=2*dp[n-1](無論放還是不放,都不會有連續m個坑里都有)

當n==m時:dp[n]=2*dp[n-1] -1(減去每個坑里都有核物質這種情況)

當n>m時:

dp[n]=dp[n-1]+dp[n-2]+……+dp[n-m]

dp[n-1]=dp[n-2]+……+dp[n-m]

兩式相減得:

dp[n]=dp[n-1]*2-dp[n-m-1]

#includeint main()

printf("%lld",dp[n]);

}

核電站問題

乙個核電站有n個放核物質的坑,坑排列在一條直線上。如果連續m個坑中放入核物質,則會發生 於是,在某些坑中可能不放核物質。任務 對於乙個核電站有n個放核物質的坑,坑排列在一條直線上。如果連續m個坑中放入核物質,則會發生 於是,在某些坑中可能不放核物質。任務 對於給定的n和m,求不發生 的放置核物質的方...

核電站問題

題目描述 乙個核電站有n個放核物質的坑,坑排列在一條直線上。如果連續m個坑中放入核物質,則會發生 於是,在某些坑中可能不放核物質。任務 對於給定的n和m,求不發生 的放置核物質的方案總數。輸入描述 輸入檔案只一行,兩個正整數n,m 1 n 50,2 m 5 輸出描述 輸出檔案只有乙個正整數s,表示方...

OpenJudge9267 核電站 動態規劃

9267 核電站 總時間限制 5000ms 單個測試點時間限制 1000ms 記憶體限制 131072kb 描述 乙個核電站有n個放核物質的坑,坑排列在一條直線上。如果連續m個坑中放入核物質,則會發生 於是,在某些坑中可能不放核物質。任務 對於給定的n和m,求不發生 的放置核物質的方案總數 輸入 只...