题解 P2426 【删数】
一眼看去:区间DP
数据范围:三重循环
好了不装B了,开始说正事
这题非常明显是区间DP。
按照惯例,先定义状态。
分析题目,发现除了区间左端点和右端点之外,什么也不需要加进状态里。因为显而易见除了区间左右端点,没有什么能够影响答案。
所以我们定义状态\(dp[l][r]\)为区间\([l,r]\)的最大答案。
这个“操作价值”可以两重循环预处理出来,所以用\(pre[l][r]\)代表删除区间\([l,r]\)的最大价值。非常明显的,甚至题目里已经直接写明白了, 其实不用预处理,现场算就行,反正是\(O(1)\)的
\begin{cases} a[l],
& \text {$l=r$} \\
|a[l]-a[r]|\times (r-l+1), & \text{$else$} \end{cases}
\]
然后就是最重要的一步——状态转移方程。
题目里有一个操作,就是一个区间删除一些数,失去一些“潜在的”价值。那么把这个过程反过来,一个区间加上一些数,得到一些“潜在的”价值。答案就是区间\([1,n]\)的最大潜在价值。
可以得到:
\]
翻译成人话就是,一个区间的潜在价值,等于从左边删去一些数或者从右边删去一些数后再加上删去的数的价值的较大值。
知道了状态转移方程,代码就非常好写了。
AC Code:
#include <bits/stdc++.h> //赞美万能头!
using namespace std;
#define MAXN 105
int n,a[MAXN],dp[MAXN][MAXN],pre[MAXN][MAXN];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
pre[i][i]=dp[i][i]=a[i];//因为题目中的特殊约定“如果只去掉一个数,操作价值为这个数的值。”
}
for(int len=2;len<=n;len++){
for(int l=1;l<=n-len+1;l++){
int r=l+len-1;
pre[l][r]=dp[l][r]=abs(a[l]-a[r])*(r-l+1);//预处理,因为有可能最优方案是把区间[l,r]都删掉,所以要给dp[l][r]也赋值。
}
}
for(int len=2;len<=n;len++){
for(int l=1;l<=n-len+1;l++){
int r=l+len-1;
for(int i=l;i<=r-1;i++){
dp[l][r]=max(dp[l][r],dp[l][i]+pre[i+1][r]);
dp[l][r]=max(dp[l][r],pre[l][i]+dp[i+1][r]);//就是状态转移方程233
}
}
}
printf("%d\n",dp[1][n]);//输出总的“潜在价值”。
return 0;
}
由于LZ非常菜,有可能有自以为是的地方,所以请在评论区无情的指出qwq
题解 P2426 【删数】的更多相关文章
- P2426 删数
P2426 删数 题目描述 有N个不同的正整数数x1, x2, ... xN 排成一排,我们可以从左边或右边去掉连续的i(1≤i≤n)个数(只能从两边删除数),剩下N-i个数,再把剩下的数按以上操作处 ...
- 洛谷P2426 删数 [2017年4月计划 动态规划12]
P2426 删数 题目描述 有N个不同的正整数数x1, x2, ... xN 排成一排,我们可以从左边或右边去掉连续的i(1≤i≤n)个数(只能从两边删除数),剩下N-i个数,再把剩下的数按以上操作处 ...
- 【题解】洛谷P2426删数
链接 https://www.luogu.org/problemnew/show/P2426 念念碎 第一次接触到区间DP(瑟瑟发抖) 所以象征性地看了一下题解 这好像是一道比较基础的区间DP吧 但是 ...
- 【题解】删数问题(Noip1994)
题目 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 11506 通过数: 3852 [题目描述] 输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序组成一个新 ...
- 洛谷 P2426 删数
题目传送门 解题思路: 区间DP,f[i][j]表示区间i~j可获得的最大值,因为本题的所有区间是可以直接一次性把自己全删掉的,所以所有区间初始化为被一次性删除的值,然后枚举断点,跑区间DP. AC代 ...
- 【洛谷P2426】删数
删数 题目链接 一道裸的区间DP,f[l][r]表示剩下区间[l,r]时的最大价值 可以由f[1~l-1][r]和f[l][r+1~n]转移过来 详见代码: #include<algorithm ...
- 题解 洛谷 P5324 【[BJOI2019]删数】
先考虑对于一个序列,能使其可以删空的的修改次数. 首先可以发现,序列的排列顺序是没有影响的,所以可以将所有数放到桶里来处理. 尝试对一个没有经过修改的可以删空的序列来进行删数,一开始删去所有的\(n\ ...
- 删数方案数(regex)
[题目描述] 给出一个正整数序列 a,长度为 n,cyb 不喜欢完美,他要删掉一些数(也可以不删,即删掉0个),但是他不会乱删,他希望删去以后,能将 a 分成 2 个集合,使得两个非空集合的数的和相同 ...
- [BJOI2019]删数(线段树)
[BJOI2019]删数(线段树) 题面 洛谷 题解 按照值域我们把每个数的出现次数画成一根根的柱子,然后把柱子向左推导,\([1,n]\)中未被覆盖的区间长度就是答案. 于是问题变成了单点修改值,即 ...
- codevs4096 删数问题
题目描述 Description 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N 和S,寻找一种方案使得剩下的数字组成的新数最小. 输入 ...
随机推荐
- PHP XML DOM:DOM 是什么?
PHP XML DOM 内建的 DOM 解析器使在 PHP 中处理 XML 文档成为可能. DOM 是什么? W3C DOM 提供了针对 HTML 和 XML 文档的标准对象集,以及用于访问和操作这些 ...
- PHP fileatime() 函数
定义和用法 fileatime() 函数返回指定文件的上次访问时间. 如果成功,该函数将以 Unix 时间戳形式返回文件的上次访问时间.如果失败,则返回 FALSE. 语法 fileatime(fil ...
- PHP PDO连接
连接是通过创建 PDO 基类的实例而建立的.不管使用哪种驱动程序,都是用 PDO 类名. 连接到 MySQL <?php高佣联盟 www.cgewang.com $dbh = new PDO(' ...
- 7.1 NOI模拟赛 计数问题 dp
还是可以想出来的题目 不过考场上没有想出来 要 引以为戒. 初看觉得有点不可做 10分给到了爆搜. 考虑第一个特殊情况 B排列为1~m. 容易发现A排列中前m个数字 他们之间不能产生交换 且 第k个数 ...
- luogu 3188 [HNOI2007]梦幻岛宝珠
LINK:梦幻岛宝珠 时隔多日 我再次挑战这道题.还是以失败告终. 我觉得这一道背包真的有点难度 这是一个数量较少 但是价值和体积较大的背包. 通常的01背包 要不就是体积小 要么是价值小 但这道题给 ...
- JDK8的Stream操作
原文:https://mp.weixin.qq.com/s/N2zor5RzuHHTHQLHWVBttg 作者:思海同学 好好学java 其他资料:https://mp.weixin.qq.com/ ...
- RNN神经网络模型原理
1. 前言 循环神经网络(recurrent neural network)源自于1982年由Saratha Sathasivam 提出的霍普菲尔德网络. 传统的机器学习算法非常依赖于人工提取的特征, ...
- 打开桌面的Eclipse闪退,打不开
参考了网上说的方法: .在C:/WINDOWS/system32 系统文件夹中ctrl+F 然后搜索java.exe,如果存在java.exe, javaw.exe etc.全部删除. 2.内存不足, ...
- 精讲RestTemplate第3篇-GET请求使用方法详解
本文是精讲RestTemplate第3篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...
- Python下载网络图片方法汇总与实现
本文介绍下载python下载网络图片的方法,包括通过图片url直接下载.通过re/beautifulSoup解析html下载以及对动态网页的处理等. 很多人学习python,不知道从何学起.很多人 ...