HDU 4248 DP與組合數學

2021-07-11 06:06:11 字數 678 閱讀 1489

#include #include const int maxn = 110;

const int mod = 1e9 + 7;

int c[maxn * maxn][maxn], num[maxn];

long long dp[maxn][maxn * maxn];

int n, kase;

void init()

}int main(int argc, char const *argv)

for (int i = 1; i <= sum; i++)

ans = (ans + dp[n][i]) % mod;

printf("case %d: %lld\n", ++kase, ans);

} return 0;

}

dp[ i ][ j ]表示前i種石頭構成的長度為j的序列的個數。

處理i種石頭時。可以乙個都不要。dp[i][j]=dp[i-1][j]。

也可以要k個。那麼相當於將這k個個石頭放在j個位置上。而將k個石頭放在j個位置上的方法數有c[j][k]種。

而以前的j-k個還是按照原排列。所以有dp[i-1][j-k]*c[j][k]種方法。

so  dp[i][j]=sum(dp[i-1][j-k]*c[j][k])。0<=k<=num[i]。

hdu 6143 組合數學 dp

題意 m個字母,組成兩個長度為n的字元,其中乙個字母不能同時出現在兩個串中。問總方案?思路 列舉m個中恰好有i個在第乙個串,有j個在第二個串。然後求個和。具體其中n個空恰好k種顏色,可以用dp預處理。dp j i dp j 1 i i mod dp j 1 i 1 i mod mod include...

合法括號序列(dp 組合數學)

鍵盤上有左括號 右括號 和退格鍵 共三個鍵。牛牛希望按鍵n次,使得輸入的字串恰好乙個合法的括號序列。每按一次左括號 字串末尾追加乙個左括號 每按一次右括號 字串末尾追加乙個右括號 每按一次退格鍵 會刪掉字串的最後乙個字元,特別的,如果字串為空,牛牛也可以按退格,但是什麼都不會發生。輸出方案數對p取模...

hdu 1220 Cube 組合數學

給你乙個邊長n的正方體,切割成n n n個單位體積的小正方體,求所有公共頂點數 2的小正方體的對數。公共點的數目可能有 0,1,2,4.我們用總的對數減掉有四個公共點的對數就可以了。總的對數 n 3 n 3 1 2 一共有n 3塊小方塊,從中選出2塊 而4個交點的立方體對是兩個立方體共面的情況,所以...