换零钱问题

问题描述

100元换零钱1元、2元、5元、10元、20元、50元有多少种组合方案?

解题思路

使用动态规划来求解,使用表示用不超过第个面值(从小到大排序)的零钱来表示的所有组合方案数,则

程序实现

int main()
{
    int val[7] = { 0,1,2,5,10,20,50 };
    int f[101][7];
    memset(f, 0, sizeof(f));
 
    for (int j = 0; j <= 6; j++)
        f[0][j] = 1;
    
    for (int j = 1; j <= 6; j++)
    {
        for (int i = 1; i <= 100; i++)
        {
            if (i - val[j] < 0)
                f[i][j] = f[i][j - 1];
            else
                f[i][j] = f[i - val[j]][j] + f[i][j - 1];
        }
    }
 
    cout << f[100][6] << endl;
    system("pause");
    return 0;
}

你可能感兴趣的:(换零钱问题)