换零钱问题

问题描述

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

解题思路

使用动态规划来求解,使用F(N,M)表示用不超过第M个面值(从小到大排序)的零钱来表示N的所有组合方案数,则
{\begin{equation}\begin{aligned} F(N,M) = \left\{\begin{array}{rcl} F(N,M-1)+F(N-VALUE[M],M) && {N-VALUE[M] \ge 0}\\ F(N,M-1) && {N-VALUE[M] < 0} \end{array}\right. \end{aligned}\end{equation}}

程序实现

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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 我曾经要帮一个朋友理解dynamic programming(动态规划,简称DP),所以会留心一些好的资源。...
    何旭东_07ac阅读 2,324评论 0 1
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 5,954评论 0 13
  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 2,990评论 0 1
  • 琪琪比我强! 除了没我长得好看以外,各方面都是比我强(微笑脸)。 大二寒假的时候,偶然看到他的成绩,接近4.0。膜...
    小乔忆少年阅读 207评论 0 0
  • 在文章中我学到的最重要的概念 PSE听力技巧,problem+solution+evaluation soluti...
    土管二班04曹丽霞阅读 280评论 4 0