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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Divan and Kostomuksha (easy version) dp,gcd(2100)

發(fā)布時間:2025/3/19 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Divan and Kostomuksha (easy version) dp,gcd(2100) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


題意 :

  • 對于給定序列,任意打亂順序,問 :∑i=1ngcd(a1,a2,...,an)\sum_{i=1}^{n}gcd(a_1,a_2,...,a_n)i=1n?gcd(a1?,a2?,...,an?)的最大值是多少

思路 :

  • 序列的gcd一定是遞減的
  • 設(shè)cnt(i)cnt(i)cnt(i)表示以i為因數(shù)(包含i)的數(shù)字的數(shù)量,dp[i]dp[i]dp[i]表示將i放在第一個的答案
  • 轉(zhuǎn)移方程為dp[j]=max(dp[j],dp[i]+cnt(j)?(j?i)+dp[i])dp[j] = max(dp[j], dp[i] + cnt(j) * (j - i) + dp[i])dp[j]=max(dp[j],dp[i]+cnt(j)?(j?i)+dp[i])
  • 這個方程的意義是,選擇cnt(j)cnt(j)cnt(j)個數(shù)字放在最前面,那么產(chǎn)生的gcd貢獻(xiàn)是cnt(j)?jcnt(j)*jcnt(j)?j
  • 那么對于后一段填不了j倍數(shù)的位置,不能產(chǎn)生j的貢獻(xiàn)
  • 后一段的貢獻(xiàn)怎么算呢?可以枚舉j的因數(shù)(不包含j)(因為后面的數(shù)如果不是j的因數(shù),同時也不是j的倍數(shù),產(chǎn)生的貢獻(xiàn)為1,這等價于填1,而1也是j的因數(shù) <- 這是一個關(guān)鍵的思路,刪繁就簡)
  • 對于j的因數(shù)i(i!=j),因為dp[i]dp[i]dp[i]算的是整個序列的答案,那么后一段也包含進去了,但是前一段會有重復(fù)計算,產(chǎn)生貢獻(xiàn)為i?cnt[j]i*cnt[j]i?cnt[j](gcd為i,一共cnt(j)cnt(j)cnt(j)個數(shù)字),要減去這個貢獻(xiàn)
#include <iostream> #include <algorithm> #include <cstring> #include <vector> #include <unordered_set> #include <math.h> #define endl '\n' #define fi first #define se second #define pb push_backusing namespace std; using ll = long long;typedef pair<int, int> PII;const int N = 5e6 + 10;ll cnt[N]; ll dp[N];int main() {cin.tie(nullptr) -> sync_with_stdio(false);int n; cin >> n;for (int i = 1, x; i <= n && cin >> x; i ++ ) ++ cnt[x];// cnt[i]表示i的倍數(shù)(包括i)的數(shù)量for (int i = 1; i < N; i ++ )for (int j = i + i; j < N; j += i)cnt[i] += cnt[j];dp[1] = n;ll ans = 0;for (int i = 1; i < N; i ++ ) // i是j的約數(shù)(不包含j){for (int j = i + i; j < N; j += i)dp[j] = max(dp[j], dp[i] + (j - i) * cnt[j]);ans = max(ans, dp[i]); // 邊轉(zhuǎn)移邊統(tǒng)計答案}cout << ans << endl;return 0; }

總結(jié)

以上是生活随笔為你收集整理的Divan and Kostomuksha (easy version) dp,gcd(2100)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。