hihocoder 1882 : 播放列表 (DP 或 容斥)
阿新 • • 發佈:2018-12-15
#1882 : 播放列表
時間限制:10000ms
單點時限:1000ms
記憶體限制:256MB
描述
小Hi的手機中存著N首他喜愛的歌曲。現在小Hi希望製作一個長度為L的播放列表,滿足
1. 每一首歌至少播放一編
2. 同一首歌不能連續播放,之間至少間隔一首其他歌曲
請你計算一共有多少種不同的播放列表滿足條件?由於結果可能非常大,你只需要輸出結果模1000000009的餘數。
輸入
兩個整數N和L。
對於30%的資料,1 ≤ N ≤ 5,N ≤ L ≤ 10
對於100%的資料,1 ≤ N ≤ 1000, N ≤ L ≤ 2000
輸出
一個整數,代表答案。
樣例輸入
3 4
樣例輸出
18
#include<bits/stdc++.h> using namespace std; long long mod=1000000009; int n,l; long long dp[2005][2005]; int main() { cin>>n>>l; memset(dp,0,sizeof(dp)); dp[1][1]=n; for(int i=1; i<l; i++) { for(int j=1; j<=n; j++) { dp[i+1][j]= (dp[i+1][j]+dp[i][j]*(j-1)%mod)%mod; dp[i+1][j+1]=(dp[i+1][j+1] + dp[i][j]*(n-j)%mod)%mod; } } cout<<dp[l][n]<<endl; return 0; }