zoukankan      html  css  js  c++  java
  • 刪數 (Standard IO)

    Description

    小明现在有n个不同的正整数 X1,X2,…Xn排成一行。
    小明每次可以将左边或右边删掉连续的若干个数(只能从两边删数)。
    每次删数可以得到一个值,若删除从i到j的数(i<j),则得到的价值为|Xi-Xj|*(j-i+1)。
    若只删除一个数(i=j),则得到的价值为Xi。
    现在小明想使得到的价值总和最大,请你帮他计算一下,这个最大值是多少?

    Input

    第一行一个整数n。
    第二行n个整数,表示X。

    Output

     

    输出仅一行一个整数,表示能得到的最大价值。

     

    题解

     

    大家要的公式:

    f[i]=max(f[i],f[j−1]+abs(a[j]−a[i])∗(i−j+1))

     

    代码

    var
      n:longint;
      a,f:array[0..5001] of longint;
    procedure init;
    var
      i:longint;
    begin
      readln(n);
      for i:=1 to n do
        read(a[i]);
    end;
    
    procedure main;
    var
      i,j:longint;
    begin
      f[1]:=a[1];
      for i:=2 to n do
        begin
          for j:=1 to i-1 do
            if f[i]<f[j-1]+abs(a[j]-a[i])*(i-j+1)
              then
                f[i]:=f[j-1]+abs(a[j]-a[i])*(i-j+1);
          if f[i-1]+a[i]>f[i]
            then f[i]:=f[i-1]+a[i];
        end;
    end;
    
    begin
      init;
      main;
      write(f[n]);
    end.



  • 相关阅读:
    RoIPooling、RoIAlign笔记
    ROI Align 的基本原理和实现细节
    ROI Align详解
    GIT总结
    java-变量,函数 下
    linux设置静态ip地址
    技术参考网站-网址
    python
    python
    python
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319616.html
Copyright © 2011-2022 走看看