[vijos1232]核電站問題

題目←

大概需要更多方案數這方面DP的練習……

題意:在n個位置放 <= m個核電站,有多少种放法使最長連續核電站數 <= m
dp[i][j]定義:以第i個核電站爲終點,最放連續j個核電站的方案數
這樣若j位置連續大於等於1個,則方案數爲dp[i][j] = dp[i - 1][j - 1],
若位置j連續爲0,則爲dp[i - 1]這一層所有狀態方案數的總和
注意枚舉時j始終 < m,

#include<cstdio>
using namespace std;
const int MAXN = 1000 + 50;
long long dp[MAXN][MAXN];
int n,m;
long long ans;
int main(){
    scanf("%d%d",&n,&m);
    dp[1][0] = 1;dp[1][1] = 1;
    for(int i = 2;i <= n;i ++){
        for(int j = 0;j < m;j ++){
            if(j)dp[i][j] = dp[i - 1][j - 1];
            else 
                for(int k = 0;k < m;k ++){
                    dp[i][j] += dp[i - 1][k];
                }
        }
    }
    for(int i = 0;i < m;i ++)ans += dp[n][i];
    printf("%lld",ans);
    return 0;
}
發佈了103 篇原創文章 · 獲贊 11 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章