动态规划解决硬币问题

给你一些面值为{1,3,5}的硬币,用它凑够价值为N的一个数,找出用硬币数量最少的方法。

硬币:int coins[] = {1,3,5}
需要找的钱:n
需要的数量:solu[]
路径:dp[]

#include "stdafx.h"
#include
#include

void solution(int* coins, int value, int* solu, std::vector<int> dp[100])
{
    for (int i = 0; i < value; ++i)
        solu[i] = 9999;

    solu[0] = 0;
    for (int i = 0; i < value; i++)
    {
        for (int j = 0; j < 3; ++j)
        {
            if (i >=coins[j] && solu[i] > solu[i - coins[j] ] + 1)
            {
                solu[i] = solu[i - coins[j]] + 1;
                dp[i] = dp[i - coins[j]];
                dp[i].push_back(coins[j]);
            }
        }
    }

}

int _tmain(int argc, _TCHAR* argv[])
{
    int coins[] = {1,3,5};
    int value = 100;
    int solu[100];
    std::vector<int> dp[100];

    solution(coins, value, solu,dp);
    for (int i = 0; i < 100; ++i)
    {
        std::cout << i << " need: " << solu[i]<<":";
        for (int j = 0; j < dp[i].size(); ++j)
        {
            std::cout << dp[i][j] << "->";
        }
        std::cout << std::endl;
    }

    system("pause");
    return 0;
}

你可能感兴趣的:(动态规划解决硬币问题)