题目:给n种硬币,每种无限多个,问组成m最少需要多少个?
动态规划
dp[i]表示当价值为i时的数目,则dp[i]=min(dp[i-a[j]]+1,dp[i])
int solve(int a[],int n,int targetval) { dp[0]=0; sort(a,a+n); for(int i=1;i<=targetval;i++) { dp[i]=maxn; for(int j=0;i<n;j++) { if(i>=a[j]&&dp[i]>dp[i-a[j]]+1) dp[i]=dp[i-a[j]]+1; } } if(dp[targetval]==maxn) return -1; return dp[targetval]; }