close
題目連結: https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=21808
題目大意: 給你x元,問湊成x元的方法數,(硬幣1, 5, 10, 25, 50)
思路: 典型的dp問題,考慮放或不放這個硬幣,初始時硬幣0元方法1種。
dp[i] = d[i - coin] + dp[i]. // 放硬幣的方法數 以及不放硬幣的方法數
代碼:
#include <bits/stdc++.h>
typedef long long LL;
using namespace std;
int main()
{
int t, m;
LL dp[30005] = {};
LL coin[] = {1, 5, 10, 25, 50};
dp[0] = 1;
for(int i = 0; i < 5; ++i){
for(int j = coin[i]; j <= 30000; ++j){
dp[j] = dp[j-coin[i]] + dp[j];
}
}
cin >> t;
while(t--){
cin >> m;
cout << dp[m] << endl;
}
return 0;
}
/*
2
17
4
*/
全站熱搜