zoukankan      html  css  js  c++  java
  • 宵暗的妖怪

    题目描述

    露米娅作为宵暗的妖怪,非常喜欢吞噬黑暗。
    这天,她来到了一条路上,准备吞噬这条路上的黑暗。
    这条道路一共被分为部分,每个部分上的黑暗数量为。
    露米娅每次可以任取 连续的 未被吞噬过的 三部分,将其中的黑暗全部吞噬,并获得中间部分的饱食度。
    露米娅想知道,自己能获得的饱食度最大值是多少?

    输入描述:

    第一行一个正整数,代表道路被分的份数。
    第二行有个正整数,代表每一部分黑暗数量。
    数据范围:

    输出描述:

    一个正整数,代表最终饱食度的最大值。
    示例1
    输入
    复制

    7
    2 4 1 4 2 1 8
    

    输出
    复制
    6

    说明

    选择[2,4,1]和[4,2,1]这两段即可。饱食度为4+2=6。
    示例2
    输入
    复制

    7
    2 4 1 7 2 1 8
    

    输出
    复制
    7
    说明
    选择[1,7,2]这一段即可。饱食度为7。
    值得注意的是,若取两段进行吞噬,反而最多只能获得6的饱食度,并不是最大的。

    在处理的过程中dp[i][0]表示没有被吞噬的时候的值
    dp[i][1]表示被吞噬的值
    分为两种情况,如果是没有被吞噬的情况下,可以取前一个的最大
    如果是这一个点被吞噬,就要从前一个的前一个没有被吞噬的那个来加上a[i]
    因为最终是求得最大值,这个最大值会出现在倒数第二个,因为在吞噬的过程中,只取中间部分的饱食度
    当然通过代码可以看到在最后也可以输出 -> dp[n][0]

    map <ll,ll> mp;
    ll dp[maxn][2];
    ll a[maxn];
    int main()
    {
        int n = read;
        for(int i=1;i<=n;i++) a[i]=read;
        for(int i = 2;i<=n-1;i++){
            dp[i][0] = max(dp[i-1][1] , dp[i-1][0]);
            dp[i][1] = dp[i - 2][0] + a[i];
        }
        cout<< max(dp[n-1][0],dp[n-1][1]) <<endl;
        return 0;
    }
    
  • 相关阅读:
    可以多个广告浮动的页面
    获取内容并截取长度用...替换
    用UIManager使Swing界面转换风格。
    Java FileInputStream
    win7 部署tomcat总结
    观察者模式
    Java RandomAccessFile
    Java 客户端界面功能:停止当前操作
    多线程的开启与管理
    log4j内容记录
  • 原文地址:https://www.cnblogs.com/PushyTao/p/14507405.html
Copyright © 2011-2022 走看看