蓝桥杯 试题 A: 火柴棒数字(python解答)

【问题描述】

小蓝最近迷上了用火柴棒拼数字字符, 方法如下图所示:

他只能拼 0 至 9 这十种数字字符, 其中每个数字字符需要的火柴棒的数目依次是: 6,2,5,5,4,5,6,3,7,6。他不喜欢重复拼同一个数字字符, 所以对于每个数字字符他最多拼十个。小蓝会把拼出来的数字字符组合在一起形成一个整数, 例如对于整数 345 , 需要的火柴棒的数目为 5+4+5=14 根。小蓝有 300 根 火柴棒, 他想知道自己能拼出的最大整数是多少? 可以不使用完这 300 根火柴 棒, 可以有多余的火柴棒剩下。

【答案提交】

  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个由大写字母组成的字符串,在提交答案时只填写这个字符串,填写多余的内容将无法得分。

我们看题目可以很清楚这是一个多重背包问题 ,我在网上发现没有python相关的解答,所以特意来做一个记录。但是不同于一般的多重背包问题,这里的火柴数字没有价值,或者说价值不明确,所以直接dp最大数字。每多拼一个火柴数字就多一个数量级,所以要尽可能多的拼数字。一般的加法不适用这种情况,用字符串相加,将其一般化。所以所以状态转移方程为:

dp[j] = max(dp[j],eval(str(i-1)*k+str(dp[j-k*w[i]])))

 其余同一般多重背包问题,完整代码如下:

w = [0,6,2,5,5,4,5,6,3,7,6]
dp = [0 for _ in range(301)]             #初始化dp列表
for i in range(1,11):                    #前i件物品
    for j in range(300,w[i]-1,-1):       #重量限制,逆向枚举
        for k in range(11):
            if j-k*w[i]>=0:
                dp[j] = max(dp[j],eval(str(i-1)*k+str(dp[j-k*w[i]])))

print(max(dp)//10)                      
#这里整除10是因为dp列表初始化为0,在字符化相加的时候多加一个'0',输出结果的时候应该去掉。

【最终结果】

9999999999777777777755555555554444444444333333333322222222221111111111

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
火柴数字是指使用火柴拼出的数字。根据提供的代码,可以看出这段代码是用来计算给定火柴数量的情况下,能够拼出多少个满足条件的三位数等式。代码中使用了一个字典来存储每个数字所需的火柴数量,然后通过遍历所有三位数,计算每个数字所需的火柴数量,如果满足条件,则将该数字添加到结果列表中。最后输出结果列表中的数字。\[1\]\[2\]\[3\] 请注意,这段代码是用来计算满足条件的三位数等式的个数,而不是直接输出这些等式。如果您需要直接输出这些等式,请参考提供的代码,并根据您的需求进行修改。 #### 引用[.reference_title] - *1* [Java、python实现啊哈算法 —— chapter3 火柴棍等式](https://blog.csdn.net/weixin_44089480/article/details/122256974)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python火柴棍游戏](https://blog.csdn.net/blackieliu/article/details/120336915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [蓝桥云算法题之火柴等式——Python满分解答](https://blog.csdn.net/zbp_12138/article/details/114283639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值