洛谷 5020 貨幣系統

2022-05-25 22:21:13 字數 1753 閱讀 5133

在網友的國度中共有 nn 種不同面額的貨幣,第 ii 種貨幣的面額為 a[i]a[i],你可以假設每一種貨幣都有無窮多張。為了方便,我們把貨幣種數為 nn、面額陣列為 a[1..n]a[1..n] 的貨幣系統記作 (n,a)(n,a)。

在乙個完善的貨幣系統中,每乙個非負整數的金額 xx 都應該可以被表示出,即對每乙個非負整數 xx,都存在 nn 個非負整數 t[i]t[i] 滿足 a[i] \times t[i]a[i]×t[i] 的和為 xx。然而, 在網友的國度中,貨幣系統可能是不完善的,即可能存在金額 xx 不能被該貨幣系統表示出。例如在貨幣系統 n=3n=3, a=[2,5,9]a=[2,5,9] 中,金額 1,31,3 就無法被表示出來。

兩個貨幣系統 (n,a)(n,a) 和 (m,b)(m,b) 是等價的,當且僅當對於任意非負整數 xx,它要麼均可以被兩個貨幣系統表出,要麼不能被其中任何乙個表出。

現在網友們打算簡化一下貨幣系統。他們希望找到乙個貨幣系統 (m,b)(m,b),滿足 (m,b)(m,b) 與原來的貨幣系統 (n,a)(n,a) 等價,且 mm 盡可能的小。他們希望你來協助完成這個艱鉅的任務:找到最小的 mm。

輸入檔案的第一行包含乙個整數 tt,表示資料的組數。

接下來按照如下格式分別給出 tt 組資料。 每組資料的第一行包含乙個正整數 nn。接下來一行包含 nn 個由空格隔開的正整數 a[i]a[i]。

輸出檔案共有 tt 行,對於每組資料,輸出一行乙個正整數,表示所有與 (n,a)(n,a) 等價的貨幣系統 (m,b)(m,b)中,最小的 mm。

輸入 #1複製

2 

4 3 19 10 6

5 11 29 13 19 17

輸出 #1複製

2   

5

在第一組資料中,貨幣系統 (2, [3,10])(2,[3,10]) 和給出的貨幣系統 (n, a)(n,a) 等價,並可以驗證不存在 m < 2m<2 的等價的貨幣系統,因此答案為 22。 在第二組資料中,可以驗證不存在 m < nm

【資料範圍與約定】

對於 100\%100% 的資料,滿足 1 ≤ t ≤ 20, n,a[i] ≥ 11≤t≤20,n,a[i]≥1。

題解:原來去年題目這麼水!!!蠻簡單的呀qaq。就是類似於篩法。

把一些不必要的金錢都捨掉,比如有3,則6,9,12都是多餘的,先排序

從小到大列舉。則大的肯定會被小的篩掉,最後看有多少個「必要金錢」即可。

#include#include
#include

#include

#include

#include

#include

using

namespace

std;

const

int n=103

;int

yao_chen,n,ans,mx;

int a[n],f[25005

];int

main()

sort(a+1,a+n+1

);

for(int i=1;i<=mx;i++)}}

for(int i=1;i<=mx;i++)

if(f[i]==2) ans++;

printf(

"%d\n

",ans);

}return0;

}

洛谷 5020 貨幣系統

題目描述 在的國度中共有 n 種不同面額的貨幣,第 iii 種貨幣的面額為 a i 你可以假設每一種貨幣都有無窮多張。為了方便,我們把貨幣種數為 n 面額陣列為 a 1 n 的貨幣系統記作 n,a 在乙個完善的貨幣系統中,每乙個非負整數的金額 都應該可以被表示出,即對每乙個非負整數 x,都存在 n ...

洛谷P5020貨幣系統

這個題打眼看上去可能是乙個數論或者dp,其實我們可以簡化一下題意,即 給定乙個集合 alpha 找到幾個數使得這幾個數可以拼湊起來這個集合裡所有的數,且需要使這些數的個數最小。這樣這個題就不難理解了,首先看到資料範圍,發現暴搜可以騙不少分,但其實這個題暴搜是可以a的,主要就是可以如何使暴搜的速度加快...

洛谷 P5020 貨幣系統(DP)

題意 略。題記 看題目樣例可以看出乙個規律,新貨幣是舊貨幣的子集。意思就是在原貨幣系統中可以找到一些小面額的貨幣去表示乙個大面額的貨幣。證明略 不會證明 dp i 表示面額為i能否用貨幣表示出來,則f i f i f j 時間複雜度 o 2500010020 include include incl...