算法题,编程语言不限,c,java,py

 

您是一个神仙,但您很喜欢采药。

您有一个神奇的背包,背包内有VV个格子。

您所在的空间内有一些药,每个药会占用 11 或 22 个格子。

每天可以进行一次如下操作:

采摘一个药材放入背包中,若此时背包中没有多余的格子来放入新的药材,可以先将背包中的若干药材扔出去,至于扔多少以及扔几个,全都由您决定。当然您也可以选择不去进行采摘操作。

每一天结束前,神奇背包中的每个药材都会产生一个药丸。

作为神仙,您知道每天您可以采摘的药材类型(即占用格子数目),注意,当天的药材如果不采摘,在第二天就会消失(当天药材仅限当天采摘)。

为了获得尽可能多的药丸,请您计算最终能获得的药丸数目最多是多少?

 

用 python 写的

v = int(input())
s = input()
li = list(map(int,s))
res = 0
p = {1:0,2:0}
l = 0
for x in li:
    if x<=v:
        p[x] += 1
        l += 1
        v -= x
    elif x==1 and p[2]>0:
        p[2] -= 1
        p[x] += 1
        v += 1
    res += l
print(res)

 

请参考一下背包问题: https://blog.csdn.net/qq_40427276/article/details/96998798