洛谷 5020 貨幣系統

2021-09-24 10:17:03 字數 1517 閱讀 3555

題目描述

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

在乙個完善的貨幣系統中,每乙個非負整數的金額 *** 都應該可以被表示出,即對每乙個非負整數 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:24

3 19 10 6

511 29 13 19 17

輸出樣例#1:25

說明

在第一組資料中,貨幣系統 (2,[3,10]) 和給出的貨幣系統 (n,a) 等價,並可以驗證不存在 m<2 的等價的貨幣系統,因此答案為 2。 在第二組資料中,可以驗證不存在 m解釋:先對陣列從小到大排序,然後從第乙個開始掃瞄,假設掃瞄到i,判斷能否1 - i-1表示,如果可以那就表示可以簡化掉,那個表示我們用dp來解決,dp[i]:i是否能被現在表示,那麼dp[

i]=d

p[i]

ordp

[i−a

[pos

]]

dp[i]=dp[i] or dp[i-a[pos]]

dp[i]=

dp[i

]ord

p[i−

a[po

s]],同時統計不能被表示的就ok

#include#include#include#define n 25005

using namespace std;

bool dp[n]=;

int a[103]=;

int t=0,n=0;

int ret=0;

int main()

}cout<}

return 0;

}```

洛谷 5020 貨幣系統

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

洛谷P5020貨幣系統

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

洛谷 P5020 貨幣系統(DP)

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