日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cf414B(dp)

發布時間:2023/12/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cf414B(dp) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://codeforces.com/problemset/problem/414/B

?

題意:定義所有元素是其前一個元素的倍數的數列為good sequence,給出 n, 和 k,求1....n組成的長度為k的good sequence 的數目;

?

思路:dp

用dp[i][j]存儲以 j 結尾長度為 i 的good sequence 的數目,那么我們不難發現dp[i][j]可以由dp[i-1][l] (l | j)求和得到,

即狀態轉移方程為:dp[i][j] = Σdp[i-1][l] (l | j);

注意我們可以先打表得到1...n的因子,不然可能會tle;

?

代碼:

1 #include <bits/stdc++.h> 2 #define MAXN 2010 3 #define ll long long 4 using namespace std; 5 6 const int mod=1e9+7; 7 ll dp[MAXN][MAXN]; //dp[i][j]表示以j結尾長度為i的good sequence的數目 8 vector<int>v[MAXN];//v[i]存儲i的因子 9 10 int main(void){ 11 int n, k; 12 cin >> n >> k; 13 for(int i=1; i<=n; i++){ 14 dp[1][i]=1; 15 } 16 for(int i=1; i<=n; i++){//求i的因子 17 for(int j=1; j<=i; j++){ 18 if(i%j==0){ 19 v[i].push_back(j); 20 } 21 } 22 } 23 for(int i=2; i<=k; i++){ 24 for(int j=1; j<=n; j++){ 25 for(int k=0; k<v[j].size(); k++){ 26 dp[i][j]=(dp[i][j]+dp[i-1][v[j][k]])%mod; 27 } 28 } 29 } 30 ll ans=0; 31 for(int i=1; i<=n; i++){ 32 ans=(ans+dp[k][i])%mod; 33 } 34 cout << ans << endl; 35 return 0; 36 } View Code

?

轉載于:https://www.cnblogs.com/geloutingyu/p/6556027.html

總結

以上是生活随笔為你收集整理的cf414B(dp)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。