【題目】
給定陣列arr,所有元素都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim代表要找的錢數,求換錢有多少種方法。
【舉例】
arr=[5,10,25,1] aim=0
返回1。組成0元的方法有一種,即所有貨幣都不用
arr=[3,5] aim=2
返回0。無法組成2.
arr=[5,10,25,1] aim=15
返回6。3*5,5+10,10*1+5,15*1,2*5+5*1,10+5*1
【**】
public
static
void
main(string args) ,15));//6
system.out.println(coins1(new
int,2));//0
system.out.println(coins2(new
int,15));//6
system.out.println(coins2(new
int,2));//0
}//換錢的方法數
public
static
intcoins1(int arr,int aim)
return process1(arr,0,aim);
}private
static
intprocess1(int arr, int index, int aim)
else
}return res;
}//方法二:動態規劃,非最優,時間複雜度為o(n×aim)
public
static
intcoins2(int arr,int aim)
int dp=new
int[arr.length][aim+1];
//dp[i][j]表示使用arr[0...i]組成j的方法數
for(int i=0;i0]=1;//矩陣第一列,組成0的方法:1種
}for(int j=0;arr[0]*j<=aim;j++)
//求一般位置的dp[i][j],由兩者疊加
for(int i=1;ifor(int j=1;j<=aim;j++)
}return dp[arr.length-1][aim];//arr[0...n]組成aim的方法數
}
換錢的方法數
題目 給定陣列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,設陣列長度為n,arr中所有的值都為正整數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim,代表要找的錢數,求換錢的方法數有多少種。由於方法的種數比較大,所以要求輸出對10 9 7進行取模後的答案。輸出包括兩行,第一行包括兩個整數n 0 n 10...