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.



  • 相关阅读:
    第一章 Shell基础知识
    keepalived与LVS实现高可用
    集群简介
    基于NFS v4版本搭建NFS服务器
    LDAP安装步骤
    Nginx配置阿里云https服务
    zabbix基础
    Apache、Nginx和Tomcat之虚拟主机配置
    标准盒模型和怪异盒模型的区别
    js中数组扁平化处理
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319616.html
Copyright © 2011-2022 走看看