查看: 3926| 回复: 21
跳转到指定楼层
上一主题 下一主题
收起左侧

[CareerCup] CareerCup 8.7

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
Given an infinite number of quarters(25 cents), dimes(10 cents), nickels(5 cents) and pennies(1 cent), write code to calculate the number of ways representing n cents.

上一篇:继续向学cs的筒子请教:怎么知道自己写的程序对不对?
下一篇:Google: Write a program to return the longest repeating substring in a string.
🔗
whatever 2012-7-31 22:55:12 | 只看该作者
全局:
把所有硬币放在一块,比如vector里,然后用一个recursion找出所有的子集。给所有子集求和?
回复

使用道具 举报

🔗
 楼主| BinaryWitch 2012-7-31 23:13:34 | 只看该作者
全局:
whatever 发表于 2012-7-31 22:55
把所有硬币放在一块,比如vector里,然后用一个recursion找出所有的子集。给所有子集求和?

一种硬币取了多个是怎么放进vector里的?
回复

使用道具 举报

🔗
whatever 2012-7-31 23:20:22 | 只看该作者
全局:
BinaryWitch 发表于 2012-7-31 23:13
一种硬币取了多个是怎么放进vector里的?

我意思是,比如有3个quarters,2个 dimes, 4个nickels,就弄一个container里面放{25,25,25,10,10,5,5,5,5} 然后取子集
回复

使用道具 举报

🔗
modifiedname 2012-7-31 23:31:16 | 只看该作者
全局:
def coin(n):
    out= [(a,b,c,d)
            for a in range(1+int(n/25))
            for b in range(1+int((n-25*a)/10))
            for c in range(1+int((n-25*a-10*b)/5))
            for d in range(1+n-25*a-10*b-5*c)
            if 25*a+10*b+5*c+d==n]
    print 'for sum=%d, there are %d solutions' %(n, len(out))
    return len(out)
  
回复

使用道具 举报

🔗
 楼主| BinaryWitch 2012-7-31 23:49:27 | 只看该作者
全局:
whatever 发表于 2012-7-31 23:20
我意思是,比如有3个quarters,2个 dimes, 4个nickels,就弄一个container里面放{25,25,25,10,10,5,5,5,5} ...

每种都有无限个 如果把从 1 ~ n/value 都放进集合 再找 时空都不好
回复

使用道具 举报

🔗
whatever 2012-7-31 23:50:08 | 只看该作者
全局:
BinaryWitch 发表于 2012-7-31 23:49
每种都有无限个 如果把从 1 ~ n/value 都放进集合 再找 时空都不好

看错了。。。看成finite了。。囧
回复

使用道具 举报

🔗
modifiedname 2012-7-31 23:53:24 | 只看该作者
全局:
finite解法也一样啊。。。无非就是每种面值硬币的数目都是0 ~ min of {remaining sum/面值, 硬币总数}
回复

使用道具 举报

🔗
 楼主| BinaryWitch 2012-7-31 23:55:35 | 只看该作者
全局:
本帖最后由 BinaryWitch 于 2012-7-31 23:58 编辑
小K 发表于 2012-7-31 23:31
def coin(n):
    out= [(a,b,c,d)
            for a in range(1+int(n/25))

这个够简洁的 哈哈 不知道有没有了解完全背包 有兴趣可以看看
就这个题 常数个物品来说 时间可到 O(n) 滚动数组优化空间到 O(n)
       public static int __8_7(int n) {
                int[] values = {1, 5, 10, 25};
                int[] f = new int[n+1];
                f[0] = 1;
                for (int v: values) {
                        for (int i = v; i <= n; ++i) {
                                f += f[i-v];
                        }
                }
                return f[n];
        }



回复

使用道具 举报

🔗
parker0203 2012-8-1 05:35:34 | 只看该作者
全局:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表