<更新提示>

<第一次更新>


<正文>

数组的最大代价(51nod 1270)

Description

数组A包含N个元素A1, A2......AN。数组B包含N个元素B1, B2......BN。并且数组A中的每一个元素Ai,都满足1 <= Ai <= Bi。数组A的代价定义如下:

\[S=\sum_{i=2}^{N}|A_i-A_{i-1}|
\]

(公式表示所有两个相邻元素的差的绝对值之和)

给出数组B,计算可能的最大代价S。

Input Format

第1行:1个数N,表示数组的长度(1 <= N <= 50000)。

第2 - N+1行:每行1个数,对应数组元素Bi(1 <= Bi <= 10000)。

Output Format

输出最大代价S。

Sample Input

5
10
1
10
1
10

Sample Output

36

解析

化简题目大意可以得知:即求一个数组限制下的相邻两项最大差值和。

有一个很简单的暴力DP思路如下:

设\(f[i][j]\)代表前\(i\)项当中,第\(i\)个数字取\(j\)的最大和。

\(f[i][j]=max\{f[i-1][k]+|j-k|\}\)

\((i=1 - n,j=1 - B_i,k=1 - B_{i-1})\)

时间复杂度\(O(nMax\{b_i\}^2)\)

不怕暴力TLE,就怕暴力不敢想。没错,最简单的暴力就是这道题的关键。

我们可以用贪心对这个暴力进行降维打击优化。

最显然的贪心,构造\(A_i\)时极端化能得到全局最优解。即:\(A_i\)的最优取值方案只有两种可能,\(1\)或\(B_i\),这样可以让相邻两项的差的绝对值尽可能大。

那么\(j\),\(k\)都只能取最大值或\(1\),直接实现\(O(1)\)转移。可以优化一下状态:设\(f[i][0/1]\)代表前\(i\)项当中,第\(i\)个数字取\(1\)(第二维为0)或\(B_i\)(第二维为1)的最大和。

状态转移方程:

\[f[i][0]=max(f[i-1][0],f[i-1][1]+|B_{i-1}-1|)\\f[i][1]=max(f[i-1][0]+|B_i-1|,f[i-1][1]+|B_i-B_{i-1}|)
\]

可以滚动数组一下把第一维的空间也优化了。

\(Code:\)

#include<bits/stdc++.h>
using namespace std;
inline void read(int &k)
{
int w=0,x=0;char ch;
while(!isdigit(ch))w|=ch=='-',ch=getchar();
while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
k=(w?-x:x);return;
}
const int N=50000+80;
int n,b[N],f[2][2];
inline void input(void)
{
read(n);
for(int i=1;i<=n;i++)read(b[i]);
}
inline void dp(void)
{
f[1][0]=f[1][1]=0;
for(int i=2;i<=n;i++)
{
f[i&1][0]=max(f[i-1&1][0],f[i-1&1][1]+abs(b[i-1]-1));
f[i&1][1]=max(f[i-1&1][0]+abs(b[i]-1),f[i-1&1][1]+abs(b[i]-b[i-1]));
}
}
int main(void)
{
input();
dp();
printf("%d\n",max(f[n&1][0],f[n&1][1]));
}

考点:算法思想的结合运用。


<后记>

『数组的最大代价 贪心优化DP』的更多相关文章

  1. 『土地征用 Land Acquisition 斜率优化DP』

    斜率优化DP的综合运用,对斜率优化的新理解. 详细介绍见『玩具装箱TOY 斜率优化DP』 土地征用 Land Acquisition(USACO08MAR) Description Farmer Jo ...

  2. 【贪心优化dp决策】bzoj1571: [Usaco2009 Open]滑雪课Ski

    还有贪心优化dp决策的操作…… Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里 ...

  3. 51nod1270 数组的最大代价(简单dp)

    ---恢复内容开始--- 1270 数组的最大代价 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 数组A包含N个 ...

  4. 『玩具装箱TOY 斜率优化DP』

    玩具装箱TOY(HNOI2008) Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊 ...

  5. CodeForces - 459E Pashmak and Graph[贪心优化dp]

    E. Pashmak and Graph time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. 完全背包问题 —— 贪心优化 DP 范围

    题意: 现在有 \(2n+1\) 个物品(\(n\le 300\)),体积分别为 \(-n,-n+1,\dots,-1,0,1,\dots,n\),第 \(i\) 个物品有 \(a_i\) 个,求选出 ...

  7. 『数 变进制状压dp』

    数 Description 给定正整数n,m,问有多少个正整数满足: (1) 不含前导0: (2) 是m的倍数: (3) 可以通过重排列各个数位得到n. \(n\leq10^{20},m\leq100 ...

  8. 『摆渡车 斜率优化dp及总结』

    摆渡车的题解我已经写过一遍了,在这里,这次主要从斜率优化的角度讲一下摆渡车,并总结一下斜率优化会出现的一些奇奇怪怪的错误. 摆渡车 Description 有 n 名同学要乘坐摆渡车从人大附中前往人民 ...

  9. HDU 5542 - The Battle of Chibi - [离散化+树状数组优化DP]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5542 Problem DescriptionCao Cao made up a big army an ...

随机推荐

  1. 20175305张天钰Java结对编程四则运算

    Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...

  2. Hive基础测试操作

    一.Hive测试 1.查看数据库 show databases; 2.使用某个数据库,如默认数据库 user default; 3.创建表 create table if not exist itst ...

  3. Xcode 10.1 运行老版本工程遇到问题解决记录

    近来接手公司一个历史遗留项目进行修改.上线工作,想想我都近三年没敲过iOS代码了也是慌.. 项目大致情况: 18年年初应上线项目,各种情况下一直搁置,到18年底了要重启上线,原来开发人员离职了都,年底 ...

  4. 电梯模拟系统——BUAA OO第二单元作业总结

    需求分析 官方需求 本次作业需要模拟一个多线程实时多电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出. 本次作业电梯系统具有的功能为:上下行, ...

  5. Windows 2003 防火墙开启后无法访问FTP解决办法

    最近遇到一个比较郁闷的问题,服务器开启防火墙后电脑就无法访问服务器的防火墙,但是防火墙又不能关,在例外中添加端口21也不管用. 后来在网上终于找到了一个解决方案,可以在不关掉防火墙的情况下访问服务器的 ...

  6. TypeScript专题-Static和使用技巧

    class People { static _name: string; print() { //alert(this.name);// 编译不通过,doex not exist on type Pe ...

  7. web测试点总结---UI、兼容、功能、交互、安全、性能、接口测试

    一.概述 1.什么是web? web的本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思.现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本(hypertext).超媒体(hypermed ...

  8. 2018面向对象程序设计(java)课程学习进度条

    周次 (阅读/编写)代码行数 发布博文量/评论他人博文数量 课余学习时间 学习收获的最大程序阅读或编程任务 1 30-50 1/0 5 九九乘法表 2 60-80 1/0 6 实验一,实验二 3 12 ...

  9. node05

    1.ejs: const ejs = require('ejs') ejs.renderFile('./template/a.ejs', {name:'cc'}, function (err, dat ...

  10. 4.20 Linux01

    2019-4-20 21:04:14 day102linux 开始认真学习Linux ,因为服务器部署还是得会Linux 开始整理一下笔记 等把Linux全部学完后 然后写个文章整理一下! Linux ...