自学内容网 自学内容网

2021 年 3 月青少年软编等考 C 语言四级真题解析

T1. 酒鬼

Santo 刚刚与房东打赌赢得了一间在 New Clondike 的大客厅。今天,他来到这个大客厅欣赏他的奖品。房东摆出了一行瓶子在酒吧上。瓶子里都装有不同体积的酒。令 Santo 高兴的是,瓶子中的酒都有不同的味道。房东说道:“你可以喝尽可能多的酒,但是一旦打开酒盖你就必须把它喝完,喝完一瓶后把它放回原处。还有一件最重要的事,你必须从左至右依次喝,并且不能连续喝三瓶,不然会给你带来坏运气。”

现在可怜的 Santo 站在酒吧前努力的想着,他到底应该喝哪几瓶才能使喝的酒最多呢?请帮助他找出他应该喝的酒瓶号,因为思考让他感到不安。

时间限制:2 s
内存限制:128 MB

  • 输入
    第一行一个整数 N N N,有 N N N 个酒瓶。 N ≤ 700 N\le 700 N700
    接下有 N N N 行,第 i + 1 i+1 i+1 行的数字代表酒瓶 i i i 中酒的体积。
  • 输出
    一个数字,喝的酒的最大总体积。遵守以上规则,使得三个连续瓶子中至少一个瓶子是满的。数据保证答案在 32 32 32 位整数范围内。
  • 样例输入
    6
    6
    10
    13
    9
    8
    1
    
  • 样例输出
    33
    

思路分析

此题考查动态规划,属于基础题。

定义 f i , 0 f_{i,0} fi,0 表示第 i i i 瓶酒没有喝的情况下可以喝到的酒的最大体积, f i , 1 f_{i,1} fi,1 表示第 i i i 瓶酒喝了的情况下可以喝到的酒的最大体积。

  • 若第 i i i 瓶酒没有喝,则可以考虑第 i − 1 i-1 i1 瓶酒喝与不喝;
  • 若第 i i i 瓶酒喝了,则考虑第 i − 1 i-1 i1 瓶酒没有喝,以及第 i − 2 i-2 i2 瓶酒没有喝但第 i − 1 i-1 i1 瓶酒喝了的情况。

不难得出状态转移方程为
f i , 0 = max ⁡ { f i − 1 , 0 , f i − 1 , 1 } f i , 1 = max ⁡ { f i − 1 , 0 , f i − 2 , 0 + a i − 1 } + a i f_{i,0} = \max\{f_{i-1,0}, f_{i-1,1}\} \\ f_{i,1} = \max\{f_{i-1,0}, f_{i-2,0} + a_{i-1}\} + a_i fi,0=max{ fi1,0,fi1,1}fi,1=


原文地址:https://blog.csdn.net/qq_39710484/article/details/136783766

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!