題解思路:f[i]表示放到姓裡面的字元個數是i的方法有幾種,那麼我們不考慮剛好放i種的情況是不是是i^n,那麼必須要i個都要在裡面就是i^n-c(i,i-1)*f[i-1]-c(i,i-2)*f[i-2]...-c(i,1)f[1],有了f[i]以後那麼每次考慮姓放i個那麼名字裡面就可以隨便放了,就是(m-i)^n,那麼ans = (ans+c[m][i]*f[i]*(m-i)^n)%mod;對吧。
**:#include#include#include#includeusing namespace std;
typedef long long ll;
const int mx = 2e3+10,mod = 1e9+7;
int val[mx],n,m,c[mx][mx];
ll f[mx];
void init()
return ans;
}int main(){
int t;
scanf("%d",&t);
init();
while(t--){
scanf("%d%d",&n,&m);
ll ans = 0;
for(int i=1;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...
HDU 6143 排列組合 DP
題意 給出m字母,現在要求用m個字母去取名字,firstname 和 lastname 不能同時存在相同字母,問 會有多少種組合數,對於firstname 和 lastname 必須保證長度為n。資料量 0m 2000 題意 最開始最開始用的dp去推出所有的解,複雜度達到了n3 平常對複雜度的不重視...
hdu2159 動態規劃
problem description 最近xhd正在玩一款叫做fate的遊戲,為了得到極品裝備,xhd在不停的殺怪做任務。久而久之xhd開始對殺怪產生的厭惡感,但又不得不通過殺怪來公升完這最後一級。現在的問題是,xhd昇掉最後一級還需n的經驗值,xhd還留有m的忍耐度,每殺乙個怪xhd會得到相應的...