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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu-4028 The time of a day

發布時間:2025/3/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu-4028 The time of a day 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/**題意:給你1~n個數,問你它的子集內有多少集合的Lcm(最小公倍數)大于等于m的;題解:DP離散化,用map映射一下,map<LL,LL>dp[i]。表示i個數,可以有it->second種情況組成it->first。也算是長姿勢了,map的用法感覺懂得還是太少了 **/ #include<cstdio> #include<map> #include<cmath> #include<queue> #include<set> #include<vector> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef __int64 LL; map<LL,LL> dp[50]; map<LL,LL>::iterator it; LL m,n; LL gcd(LL a,LL b){return b == 0 ? a : gcd(b,a%b); } LL Lcm(LL a,LL b){return a * b / gcd(a,b); } void init(){dp[1][1] = 1;for(LL i = 2;i <= 40;i++){dp[i] = dp[i-1];//不取第i個的所有情況dp[i][i] ++;//只取第i個for(it = dp[i-1].begin();it != dp[i-1].end();it ++){dp[i][Lcm(i,it->first)] += it->second;//在前i-1的基礎上加上第i個數}} } int main(){init();int t,ca = 1;cin >> t;while(t--){cin >> n >> m;LL ans = 0;for(it = dp[n].begin();it != dp[n].end();it++)//統計一下n個數組成子集滿足條件的個數if(it->first >= m)ans += it->second;printf("Case #%d: %I64d\n",ca++,ans); // cout << ans << endl;}return 0; }

總結

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

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