貨幣系統 難度中等

2021-09-30 01:25:39 字數 1296 閱讀 3675

第二天叫醒我的不是鬧鐘,是夢想!

在網友的國度中共有 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

輸入樣例:24

3 19 10 6

511 29 13 19 17

輸出樣例:25

//3條性質:

性質1:a1,a2,a3…an-1一定都可以被表示出來。

性質2:在最優解中,b1,b2…bn一定都是從a1,a2…an中選擇的

性質3:b1,b2…bm一定能被其他bi表示出來的。

#include.h>

using namespace std;

const int n

=25010

;int dp[n]

;int a[n]

;int t,n;

int main()

cout<}}

中等難度 1

第2題 在leetcode題號為2 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。definition for singly linked lis...

careercup 中等難度 17 7

17.7 給定乙個整數,列印該整數的英文描述 例如 one thousand,two hundred thirty four 解法 舉個例子,在轉換19 323 984時,我們可以考慮分段處理,沒三位轉換一次,並在適當的地方插入 thousand 千 和 million 百萬 也即,convert ...

careercup 中等難度 17 8

17.8 給定乙個整數陣列 有正數和負數 找出總和最大的連續序列,並返回總和。解法 就是求連續子串行的和最大,不過存在乙個問題 假設整個陣列都是負數,怎麼樣才是正確的行為呢?看看這個簡單的陣列,一下答案每個都可以說的通 3 假設子串行不能為空 0 子串行的長度為空 int min 視為錯誤的情況 我...