2 条题解

  • 5
    @ 2022-9-10 20:55:11

    这么晚了竟然还是首发qwq,既然是动态规划的标签,那就用最简单的动态规划模式

    #include <bits/stdc++.h>
    using namespace std;
    long long int n,a[1000010],f[1000010];//因为数据最大是10^6,所以放在全局变量来定义。f[i]表示前i个数的最大价值
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }//基础的读入
        f[1]=0;//当数组里只有一个元素时,价值为0
        f[2]=abs(a[2]-a[1]);//数组前两个元素的价值就是前两个元素的差的绝对值
        for(int i=3;i<=n;i++)//dp
        {
            if(a[i-2]<=a[i-1] && a[i-1]<=a[i] || a[i-2]>=a[i-1] && a[i-1]>=a[i])
            {
                f[i]=f[i-1]+abs(a[i]-a[i-1]);//判断是否有三个元素连续上升或下降,那么最大价值为首元素和末元素的差的绝对值
            }
            else
            {
                f[i]=max(f[i-1],f[i-2]+abs(a[i]-a[i-1]));//否则决定在这里是否将该元素纳入编排,去两种情况的最大值
            }
        }
        cout<<f[n]<<endl;//最后输出即可
        return 0;
    }
    

    qwq

    • -6
      @ 2022-4-24 16:45:44

      写题解请注意

      鼓励大家写题解,但注意题解格式。

      题解一定要有思路解析或代码注释,能否让别人理解你的思路

      也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

      给代码两端加上这个会舒服一些

      ```cpp

      你的代码

      ```

      </span>

      这个点在键盘的左上角tab上面那个键,注意切换输入法

      #include<iostream>
      using namespace std;
      int main()
      {
          int n;
          cin>>n;//这是一个注释
          return 0;
      } 
      

      请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

      抄袭题解一经发现直接取消成绩。

      题解被删除的可能

      1. 代码不符合格式规范
      2. 没有思路讲解或者没有注释,
      3. 无意义的题解

      大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

      • 1

      信息

      ID
      1241
      时间
      1000ms
      内存
      256MiB
      难度
      5
      标签
      递交数
      166
      已通过
      70
      上传者