(每日一练28757)题目名称:硬币划分

文盲老顾
WEB应用领新星创作者
博客专家认证
2023-05-08 09:52:18

有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n<100000),有多少中组合可以组成n分钱?

输出组合数,答案对1e9+7取模。

这个题目需要优化算法,老顾暂时没有优化,先放个会超时的暴力做法,后边再进行优化。在限定了输入值只有则只有70%的通过率。

n = int(input())
if n < 30000:
    ans = 0
    for i in range(n // 10 + 1):
        for j in range((n - i * 10) // 5 + 1):
            ans += (n - i * 10 - j * 5) // 2 + 1
    print(ans % int(1e9 + 7))

然后找了个 c++ 的题解https://blog.csdn.net/weixin_50953229/article/details/128225185,亲测可以AC,有时间的时候去加强下理解,然后做成 python 和 js 的版本

...全文
156 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
文盲老顾 2023-05-08
  • 打赏
  • 举报
回复

暂时不懂这是个什么公式推导出来了,就和背包一样,学就完事了

n = int(input())
c = [10,5,2,1]
dp = [1] + [0 for _ in range(n)]
for i in range(len(c)):
    for j in range(c[i],n + 1):
        dp[j] = dp[j] + dp[j - c[i]]
print(dp[-1] % int(1e9 + 7))

321

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧