定义dp【i】数组为兑换i元时所需张数
初始化dp数组为aim+1;即无法兑换时返回0
转移方程:
dp[i]=fmin(dp[i],dp[i-arr[j]]+1);
举例 当遍历至i=10元时 取i=5时张数+1,因为数组中含5,所以张数+1,以及取i=7时张数+1,数组中含3,所以张数加一;比较取最小值
int minMoney(int* arr, int arrLen, int aim ) {
// write code herei
int dp[aim+1];
int i,j;
for(i=0;i<aim+1;i++)
dp[i]=aim+1;
dp[0]=0;
if(aim<1)
return 0;
for(i=1;i<=aim;i++)
{
for(j=0;j<arrLen;j++)
{
if(arr[j]<=i)
{
dp[i]=fmin(dp[i],dp[i-arr[j]]+1);
}
}
}
return dp[aim]>aim?-1:dp[aim];
}