b_al_小强吃烧饼(模型脱离dp)

小强暑假在烧饼铺打工,作为一名打工仔,他干活非常卖力。这不,店里举办了一个烧饼大赛,冠军是烧饼吃的最多的人!
老板将烧饼摆在一排的n个盘子上,其中第i个盘子中有Si个烧饼,但是对于一次吃烧饼操作,
参赛者每次选择1到n的某个整数x,将1,2......,x-1,x盘子中里的烧饼都吃掉一个,
当然,如果1到x的某个盘子里没有烧饼了,那么这个x不能被选。
小强作为这次比赛的第一个挑战者,请你告诉他,假如他胃无限大的情况,能吃掉最多多少烧饼?

第一行一个整数n表示盘子的个数。第二行n个整数Si表示盘子i里最初的烧饼个数。
1 <= n <= 10^6
1 <= Si <=10^9

5 6 3 7 2 4
20

对于当前位置 x,我们能吃的个数取决于 0...x-1 这些位置上的烧饼个数中的最小值
比如 2,3,4,1000,如果小强每次都选择在x=3位置开始,我们能吃的只有2个,对于其它位置也是如此

def solve(n, S):
    f, ans = [0] * n,0
    for i in range(0, n):
        if i == 0: f[i] = S[i]
        else: f[i] = min(f[i-1], S[i])
        ans += f[i]
    return ans
S = list(map(int,input().split(" ")))
print(solve(len(S), S))
posted @ 2021-03-06 16:20  童年の波鞋  阅读(120)  评论(0编辑  收藏  举报