2018NOIP提高組 貨幣系統(完全揹包)

2021-09-28 19:05:23 字數 1404 閱讀 1668

貨幣系統

在網友的國度中共有 n 種不同面額的貨幣,第 i 種貨幣的面額為 a[i],你可以假設每一種貨幣都有無窮多張。

為了方便,我們把貨幣種數為 n、面額陣列為 a[1..n] 的貨幣系統記作 (n,a)。 

在乙個完善的貨幣系統中,每乙個非負整數的金額 x 都應該可以被表示出,即對每乙個非負整數 x,都存在 n 個非負整數 t[i] 滿足 a[i]× t[i] 的和為 x。

然而,在網友的國度中,貨幣系統可能是不完善的,即可能存在金額 x 不能被該貨幣系統表示出。

例如在貨幣系統 n=3, a=[2,5,9] 中,金額 1,3 就無法被表示出來。 

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

現在網友們打算簡化一下貨幣系統。

他們希望找到乙個貨幣系統 (m,b),滿足 (m,b) 與原來的貨幣系統 (n,a) 等價,且 m 盡可能的小。

他們希望你來協助完成這個艱鉅的任務:找到最小的 m。

輸入格式

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

接下來按照如下格式分別給出t組資料。 

每組資料的第一行包含乙個正整數 n。

接下來一行包含 n 個由空格隔開的正整數 a[i]。

輸出格式

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

資料範圍

1≤n≤100,

1≤a[i]≤25000,

1≤t≤20

輸入樣例:

2 

4 3 19 10 6

5 11 29 13 19 17

輸出樣例:

2

5

分析:

a1,a2,...,an都可以被表示出來

在最優解中,b1,b2,...,bm都是從a1,a2,...,an中選擇的

b1,b2,...,bm不能被其他bi表示出來

演算法流程:(無負數)先排順序,然後從小到大判斷當前數是否可以由前面的數表示。

可以抽象為完全揹包問題,把ai看作物品,ai的大小看作體積和價值。

若f[a[i]]==1則表示a[i]只能由自身表示自己,不能由其它數表示。

#include #include #include using namespace std;

int a[105],f[25010];

int main()

}int res=0;

for(int i=0;iprintf("%d\n",res);

}return 0;

}

NOIp2018提高組 貨幣系統

有 n n le100 種不同的貨幣,每種貨幣的面額為 1,25000 之間的乙個整數。若兩種貨幣系統能夠組合出來的數是相同的的,那我們就稱這兩種貨幣系統是等價的。給定乙個貨幣系統,求不同面額貨幣數最少的等價的貨幣系統。將面額從小到大排序,如果一種面額能夠被其它面額表示出來,那麼這種面額就是多餘的。...

2018NOIp提高組考前集訓心得

背景 弱省小白至強省名校集訓,心得頗多 心得 學習划水一年,連模板都別不全的小白到某市某中學參加考前集訓。之前在自己的學校裡都是各種考試韌性測試,各種考試爆零。一心只求正解,殊不知出題人心險惡。而某校則不同。他們的題目大都一套一套做,並且考試時既有簽到題,也有玄學題。上午考完試後,會發出天書題解,並...

2018NOIP普及組 划水記

這次noip真的是涼透了。好多可以避免的失分。希望有一等吧。第二天就要考初賽了,但是內心毫無波動。複習是不可能複習的。而且感覺很穩 下午初賽。心態很好。和wyc聊了一下初賽打算靠多少,大概爆0 70吧。反正廣東的分數線從來沒有浙江那麼高。過了就行了。初賽還是很順利的。只不過最後一道題雙向鍊錶花了太多...