求最大值,看二分答案,但是非常困難,看貪心,發現很難貪。考慮dp,找一個沒有後效性的來設計狀態,發現如果狀態是字首gcd的話就比較好,沒有後效性。轉移的話就是從大的向小的轉移,那麼轉移方程就是\(dp[i]=max(dp[i],dp[i*j]+cnt[i]-cnt[i*j])\) cnt[i]為i的倍數的個數,那麼因為調和級數,這些都是\(O(n \log n)\)的。然後hard version的話要考慮從質數轉移過來,因為從質數轉移過來的話可以涵蓋所有情況
求最大值,看二分答案,但是非常困難,看貪心,發現很難貪。考慮dp,找一個沒有後效性的來設計狀態,發現如果狀態是字首gcd的話就比較好,沒有後效性。轉移的話就是從大的向小的轉移,那麼轉移方程就是\(dp[i]=max(dp[i],dp[i*j]+cnt[i]-cnt[i*j])\) cnt[i]為i的倍數的個數,那麼因為調和級數,這些都是\(O(n \log n)\)的。然後hard version的話要考慮從質數轉移過來,因為從質數轉移過來的話可以涵蓋所有情況