
动态规划三大题型:计数问题、最值问题、存在性问题。
该题问可以称出多少种不同的重量,属于计数题型。
动态规划实现思路
从一个砝码开始,每个状态列举出当前可以被称出的重量;每次加入一个砝码,这时只需要将上一个状态的每个可以被称出的重量与新的砝码进行组合,即得出当前砝码数量可以被称出的所有重量;一直到最后一个砝码加入,最后一个状态就得出了所有可以被称出的重量
样例输入:3 1 4 6
加入第一个砝码1(状态1) 只能称出重量1
加入第二个砝码4 (状态2) 自身4可以称出 在1的状态1下更新1+4=5,4-1=3,就是1,3,4,5;
加入第三个砝码6 自身6可以称出 在状态2下更新1+6=7,6-1=5,3+6=9,6-3=3,4+6=10,6-4=2,5+6=11,6-5=1,就是1,2,3,4,5,6,7,9,10,11;
number = int(input()) # 砝码数量
arr = list(map(int, input().split()))
summ = sum(arr)
# 动态规划数组 dp[i][j]代表加入第i个砝码时,能不能称出重量j
dp = [[False for l in range(summ + 1)] for h in range(number + 1

本文探讨了蓝桥杯竞赛中的一道动态规划题目,涉及砝码称重的计数问题。通过逐个添加砝码,计算可以称出的不同重量,详细阐述了动态规划的实现思路,并提供了样例输入及解题过程。目前解法已通过部分测试用例,寻求优化建议。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=122062988&d=1&t=3&u=c540a43f37504debba68c7b8c7809785)
4905

被折叠的 条评论
为什么被折叠?



