hdu 3092(篩素數法 完全揹包)

2021-09-24 00:00:21 字數 742 閱讀 8639

hdu-3092

(1)題意:

將乙個數分為若干個數字x1……xn,得到這若干個數字的最小公倍數lcm,

求lcm的最大值%m。

(2)思路:

讓lcm最大,就是盡可能的讓x1……xn這些數字互質,所以先篩出素數(範圍1~3000),然後將這些素數

視為物品,有乙個揹包的容積為n,就是完全揹包了。

但是考慮n=7的情況,7 = 3+4,lcm(3,4) = 12.

4不是素數,但4時2的平方,所以,物品並不僅是所有的素數,還可能是素數的平方,所以還要遍歷每個素數的k次方的值

(這裡由於素數之間是互質的,所以素數的k次方之間也一定是互質的。)

(3)注意:

這裡的結果對m取模,所以不能直接比較ans的大小,可以用log函式將乘法變為加法,

再設定乙個dp陣列,儲存可以比較的值,ans陣列記錄結果。

(4)**實現:

參考文章

#include#include#include#includeusing namespace std;

const int maxn = 1e5+10;

int tot,ans[maxn],prim[maxn],vis[maxn];

double dp[maxn];

void init()

}} printf("%d\n",ans[n]); }

return 0;

}

HDU 6069 素數篩法

思路 設 n p 1 p 2 p m n p 1 c 1 p 2 c 2 p m c m 則d n k kc 1 1 kc 2 1 kc m 1 d n c 1 1 c2 1 c m 1 則 d n k kc 1 1 kc 2 1 kc m 1 d n k kc 1 1 kc 2 1 k c m 1...

完全揹包 HDU 1114

今天看了看揹包九講的完全揹包。估計是因為只記住了方程,沒理解透的原因。照著寫,還是錯了 錯就錯在初始化的時候,我全部初始化為0了,然後用max 但是得不到答案。可是初始化出0位置以外,其他都為無窮大,取min,過了 額。去問問高手吧我。再研究了下,猛然回頭,發現,是求揹包裝滿的 最小價值 inclu...

hdu 1203(完全揹包)

problem description speakless很早就想出國,現在他已經考完了所有需要的考試,準備了所有要準備的材料,於是,便需要去申請學校了。要申請國外的任何大學,你都要交納一定的申請費用,這可是很驚人的。speakless沒有多少錢,總共只攢了n萬美元。他將在m個學校中選擇若干的 當然...