核電站問題
乙個核電站有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,求不發生 的放置核物質的方案總數 輸入 只...