換錢的方法數(hard,主要怎樣去重)

2021-09-27 04:45:15 字數 877 閱讀 4598

dp[i]:表示換 i 的錢的方案數量

這裡注意去重,如2,3,5,換5的錢

0 1 2 3 4 5

以2為起始  1 0 1 0 2 0

以3為起始  1 0 1 1 2 1

以5為起始  1 0 1 1 2 2

故換5的錢一共2種方法:即2+3和5

這裡通過這樣的順序限定,使得2,3和3,2不會重複,因為必定是3,2

#include #include using namespace std;

const int mod = 1e9+7;

int getmethods(int n,vector&nums,int aim)

}for(auto n:dp) cout << n << ' ';

cout << endl;

return dp[aim];

}int main()

dp[i][j]:總錢數為 i,使用 j 和 j 前面的錢去組合,最多的種數(紅色部分防重複)

#include #include using namespace std;

const int mod = 1e9+7;

int getmethods(int n,vector&nums,int aim)else}}

return dp[aim][n];

}int main()

換錢的方法數

題目 給定陣列arr,arr中所有的值都為整數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數代表要找的錢數,求換錢有多少種方法。舉例 arr 5,10,25,1 aim 0 組成0元的方法有1種,就是所有面值的貨幣都不用。所以返回1。arr 5,10,25,1 ai...

換錢的方法數

1.給定陣列arr,arr中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種貨幣都可以使用任意張,再給定乙個整數aim代表要找的錢數,求組成aim的最少貨幣數。方法一 暴力遞迴 遞迴部分 a index i就是用幾張a index process a,0,target defprocess ...

換錢的方法數

題目 給定陣列arr,所有元素都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim代表要找的錢數,求換錢有多少種方法。舉例 arr 5,10,25,1 aim 0 返回1。組成0元的方法有一種,即所有貨幣都不用 arr 3,5 aim 2 返回0。無法組成2...