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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu--4028--dp

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

這個dp我沒做出來啊...其實不難..主要題意沒理解好 fuck.

給你1-N這N個數? 一共2^N-1個子集 每個子集的LCM值>=M的情況數有多少種

我也是醉了 這么個題目 給我套他那個題面 硬是沒看懂 他在問什么 還是 英語太渣了

然后就是個 狀態轉移方程的考慮了

map<LL,LL>dp[size] 表示? 前size個數 構成的lcm值為 it->first的情況為 it->second種

dp[ i ] = dp[ i-1 ]? //不添加第 I 個元素

dp[ i ][ i ] ++//第I個元素自身構成的集合

for it - >?? begin() -? end()

dp[ i][ it->fist ] += it->second //第I個元素與前面的 I-1元素構成的集合組合出的情況

?

1 //給你1-N 這N個數 問有多少個子集 該集合的LCM >= M 2 3 #include <iostream> 4 #include <map> 5 using namespace std; 6 7 const int size = 40; 8 typedef long long LL; 9 map<LL,LL>dp[size+5];//前 i 個數組合出的lcm值 10 map<LL,LL>::iterator it; 11 12 LL gcd( LL x , LL y ) 13 { 14 return x % y == 0 ? y : gcd( y , x%y ); 15 } 16 17 void init( int n ) 18 { 19 dp[1][1] = 1; 20 for( int i = 1 ; i<=n ; i++ ) 21 { 22 dp[i] = dp[i-1]; 23 dp[i][i] ++; 24 for( it=dp[i-1].begin() ; it!=dp[i-1].end(); it++ ) 25 { 26 dp[i][ it->first*i/gcd(i,it->first) ] += it->second; 27 } 28 } 29 } 30 31 int main() 32 { 33 cin.sync_with_stdio(false); 34 int n , t; 35 LL m , ans; 36 init( size ); 37 cin >> t; 38 for( int k = 1 ; k<=t ; k++ ) 39 { 40 cin >> n >> m; 41 ans = 0; 42 for( it = dp[n].begin() ; it!=dp[n].end() ; it++ ) 43 { 44 if( it->first>=m ) 45 { 46 ans += it->second; 47 } 48 } 49 cout << "Case #" << k << ": " << ans << endl; 50 } 51 return 0; 52 } View Code

?

轉載于:https://www.cnblogs.com/radical/p/4078438.html

總結

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

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