设为首页 加入收藏

TOP

uva 674 Coin Change(完全背包)
2014-11-23 21:46:36 来源: 作者: 【 】 浏览:9
Tags:uva 674 Coin Change 完全 背包
题目大意:有5种硬币, 面值分别为1、5、10、25、50,现在给出金额,问可以用多少种方式组成该面值。
解题思路:每种硬币都有无限个,所以是典型的完全背包, 一开始写的时候没有考虑到面值的重复问题, 打表的时候将金额值逐一去计算, 但又使用到cnt[i] += cnt[i - sex[j]], 然后导致有些组成方式重复考虑进去(这种只适用50以内的, 不会造成面值的的重复考虑, 比如 100, 在sex[j] == 25时, cnt[100] += cnt[75], 但是75里面的组成方式里有可以用面值为50去组成的方案, 所以等下计算sex[j] == 50的时候就重复计算了)
正确的做法是cnt[i] += low(cnt[i - sex[j]]) 表示说cnt[i - sex[j]] 中用面值小于等于sex[j]的组成方式种类。写法代码中给出。
#include   
#include   
const int N = 7500;  
const int sex[] = {1, 5, 10, 25, 50};  
  
int n, cnt[N], t;  
  
void Init() {  
    memset(cnt, 0, sizeof(cnt));  
    cnt[0] = 1;  
    for (int i = 0; i < 5; i++) {  
    for (int j = sex[i]; j < N; j++)  
        cnt[j] += cnt[j - sex[i]];  
    }  
}  
  
int main() {  
    Init();  
    while (scanf("%d", &n) == 1) {  
    printf("%d\n", cnt[n]);  
    }  
    return 0;  
}  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇NYOJ 370 波动序列 下一篇HDU3208(区间指数和)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·一篇说人话的文章, (2025-12-27 07:50:09)
·Python Web框架哪家 (2025-12-27 07:50:06)
·基于Python的数据分 (2025-12-27 07:50:03)
·深入理解 Java 集合 (2025-12-27 07:22:48)
·Java集合框架全面解 (2025-12-27 07:22:45)