題意:略。
題記:看題目樣例可以看出乙個規律,新貨幣是舊貨幣的子集。意思就是在原貨幣系統中可以找到一些小面額的貨幣去表示乙個大面額的貨幣。證明略(不會證明 )。dp[i]表示面額為i能否用貨幣表示出來,則f[i]=f[i]|f[j]。
時間複雜度:o(2500010020)。
#include
#include
#include
#include
#include
#include
using namespace std;
#define f first
#define s second
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl "\n"
#define lowbit(x) ((x)&(-x))
typedef
long
long ll;
const
int inf =
0x3f3f3f3f
;const
int dis[
2]=,
,,,,
,,};
const
int mod =
1e9+7;
const
int n =
25010
;bool dp[n]
;int a[
110]
;int
main()
} cout << ans << endl;
}return0;
}
洛谷P5020貨幣系統
這個題打眼看上去可能是乙個數論或者dp,其實我們可以簡化一下題意,即 給定乙個集合 alpha 找到幾個數使得這幾個數可以拼湊起來這個集合裡所有的數,且需要使這些數的個數最小。這樣這個題就不難理解了,首先看到資料範圍,發現暴搜可以騙不少分,但其實這個題暴搜是可以a的,主要就是可以如何使暴搜的速度加快...
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 個非負整數 ...