hdu4248 组合数学+DP

题意:n种颜色石头第i种颜色有num[i]个,每种每个可取可不取(不同顺序算两种)问有多少种组合 

例子:  1个A 2个B  :  A  B  AB BA BB ABB BBA BAB 共8种 

思路:考虑DP:dp[i][j]表示前i种一共选了j个石头 i:1~n j:1~sum

A.选第i+1种石头,dp[i+1][j+k]+=dp[i][j]*C[j+k][k]; 

目前长度是j假设选k个那么就有C(j+k,k)种可以放 ,1<=k

B.不选第i+1种石头,dp[i+1][j]=dp[i][j] 

(dp[i][j]=(dp[i][j]+(dp[i-1][j-k]*C[j][k]%mod))%mod;一个意思)

ans=sum(dp[n][j]) j:1~sum 

注意:dp[0][0]=1;用cin5秒多,scanf2秒多



你可能感兴趣的:(ACM--组合数学)