动态规划-----找零钱问题
1.写出递归式
2.建表查表
避免重复计算
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
int makeChange(int values[], int valuesKinds, int money, int coinsUsed[])
{
coinsUsed[0] = 0;
for (int cents = 1; cents <= money; cents++)
{
int minCoins = cents;
for (int kind = 0; kind < valuesKinds; kind++)
{
if (values[kind] <= cents)
{
int temp = coinsUsed[cents - values[kind]] + 1;
if (temp < minCoins)
minCoins = temp;
}
else
{
break;
}
}
coinsUsed[cents] = minCoins;
}
return coinsUsed[money];
}
int main()
{
int* coinValue = new int[3]{ 1 ,5,11 };
int money = 15;
int* coinsUsed = new int[money + 1];
cout << makeChange(coinValue, 3, money, coinsUsed);
}