這個題打眼看上去可能是乙個數論或者dp,其實我們可以簡化一下題意,即
給定乙個集合\(\alpha\),找到幾個數使得這幾個數可以拼湊起來這個集合裡所有的數,且需要使這些數的個數最小。
這樣這個題就不難理解了,首先看到資料範圍,發現暴搜可以騙不少分,但其實這個題暴搜是可以a的,主要就是可以如何使暴搜的速度加快。
首先我們想如果\(a\)可以被其他數表示出來,且\(a-b\)也可以被其他數表示出來,那\(b\)肯定要在這個集合裡,所以我們可以列舉b,然後判斷\(a-b\)是否已經被篩過了,但是這樣比較慢,可能會t,那正著搜尋不行,我們可以考慮反向考慮,因此我們可以用埃拉託色尼篩法的思想,從小到**擇可以滿足的數,並在此之前排序一遍,因為如果這個數\(a\)已經被別的數篩去了,\(a\)就不需要再篩其他的數,因為篩掉\(a\)的數,已經把\(a\)能篩掉的數都給篩掉了,因此需要從小到大處理。
**:
#include #include #include #include #include using namespace std;
int a[100010], keyi, n;
bool bei[100010];//表示該數能不能被表示出來
int main()
printf("%d\n", keyi);
}
return 0;
}
洛谷 P5020 貨幣系統(DP)
題意 略。題記 看題目樣例可以看出乙個規律,新貨幣是舊貨幣的子集。意思就是在原貨幣系統中可以找到一些小面額的貨幣去表示乙個大面額的貨幣。證明略 不會證明 dp i 表示面額為i能否用貨幣表示出來,則f i f i f j 時間複雜度 o 2500010020 include include incl...
P5020 貨幣系統
在的國度中共有 n種不同面額的貨幣,第 i種貨幣的面額為 a i 你可以假設每一種貨幣都有無窮多張。為了方便,我們把貨幣種數為 n 面額陣列為a 1.n 的貨幣系統記作 n,a 在乙個完善的貨幣系統中,每乙個非負整數的金額 x都應該可以被表示出,即對每乙個非負整數 x,都存在 n 個非負整數 t i...
P5020 貨幣系統
在的國度中共有 n 種不同面額的貨幣,第 i 種貨幣的面額為a i 你可以假設每一種貨幣都有無窮多張。為了方便,我們把貨幣種數為 n 面額陣列為 a 1.n 的貨幣系統記作 n,a 在乙個完善的貨幣系統中,每乙個非負整數的金額 x 都應該可以被表示出,即對每乙個非負整數 x,都存在 n 個非負整數 ...