FJUT Home_W的拆分序列(DP)题解
Problem Description
Home 现在给你一个序列要求你将这个序列拆成恰好两个子序列。且使得两个子序列的抖动系数之和最大。
对于一个序列c1,c2,c3,……cm. 其抖动系数=|c1-c2|+|c2-c3|+……+|cm-1-cm|
Input
单组数据,一个行是一个整数n.代表序列长度。
接下一行来有n个整数,a1,a2,a3,……an 代表这个序列
2<=n<=1000
1<=ai<=1e6
Output
输出一行代表在最优的拆分方案下,最大的抖动系数之和。注意其中任意一个子序列都不可以为空
思路:我们把dp[i][j]视为以i和j结尾的两列的最大值。
我们在放a[i]的时候可以放在i - 1后面,这时就是i和j结尾;或者放在i - 1前的任意一个位置j后面,这时就是i - 1和i结尾,特别的,当i是第一个数时加0。
代码:
#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<vector>
#include<string>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
#define P pair<int,int>
typedef long long ll;
using namespace std;
const int maxn = + ;
const int MOD = 1e9 + ;
const int INF = 0x3f3f3f3f;
int dp[maxn][maxn]; //以i和j结尾的最大值
int a[maxn];
int main(){
int n;
scanf("%d" ,&n);
for(int i = ; i <= n; i++)
scanf("%d", &a[i]);
for(int i = ; i <= n; i++){
for(int j = ; j < i - ; j++){
a[] = a[i];
dp[i][j] = max(dp[i][j], dp[i - ][j] + abs(a[i] - a[i - ]));
dp[i][i - ] = max(dp[i][i - ], dp[i - ][j] + abs(a[i] - a[j]));
}
}
int ans = ;
for(int i = ; i < n; i++)
ans = max(ans, dp[n][i]);
printf("%d\n", ans);
return ;
}
FJUT Home_W的拆分序列(DP)题解的更多相关文章
- 72. Edit Distance(困难,确实挺难的,但很经典,双序列DP问题)
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...
- [JSOI2008]Blue Mary的战役地图——全网唯一一篇dp题解
全网唯一一篇dp题解 网上貌似全部都是哈希+二分(反正我是大概baidu了翻了翻)(还有人暴力AC了的..) 哈希还是相对于dp还是比较麻烦的. 而且正确性还有可能被卡(当然这个题不会) 而且还容易写 ...
- [OpenJudge90][序列DP+乱搞]滑雪
滑雪 总时间限制: 1000ms 内存限制: 65536kB [描述] Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次 ...
- 序列DP(输出有要求)
DP Time Limit:10000MS Memory Limit:165888KB 64bit IO Format:%lld & %llu Submit Status De ...
- hdoj5909 Tree Cutting(点分治+树上dp转序列dp)
题目链接:https://vjudge.net/problem/HDU-5909 题意:给一颗树,结点带权值v[i]<m.求异或和为k的子树个数(0<=k<m). 思路: 首先点分治 ...
- 一类巧妙利用利用失配树的序列DP
I.导入 求长度为\(\text{len}\)的包含给定连续子串\(\text{T}\)的 0/1 串的个数.(\(|T|<=15\)) 通常来说这种题目应该立刻联想到状压 DP 与取反集--这 ...
- 洛谷P1415 拆分数列[序列DP 状态 打印]
题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输出使得最后一个数最小的同时 ...
- 最长子序列dp poj2479 题解
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 44476 Accepted: 13796 Des ...
- FJUT Home_W的gcd(乱搞)题解
题意: 给出一个序列a1,a2,a3,……an. HOME_W想在其中挖掘二元组,其中二元组的挖掘方法如下. 对于任意整数 l,r ,可得到一个二元组(l,gcd(al,al+1,……,ar)). H ...
随机推荐
- 关于 LD_LIBRARY_PATH 这个环境变量
这个变量中可以保存linux寻找库时搜索的路径,按照一篇文章中的介绍,不应该设置这个变量.文章的重点如下: 1. 不要设置这个变量. 2. Solaris中,在编译时,使用 -L 选项指定编译时库的搜 ...
- python-demo实例
1.turtle库与蟒蛇案例 import turtle def drawSnake(rad,angle,len,neckrad): for i in range(len): turtle.circl ...
- 擠出線寬(Extrusion width),要怎麼設定?
擠出線寬(Extrusion width),要怎麼設定? Slic3r的作者,把這邊的%設定,跟"層高"做連結.我個人認為擠出線寬,要以噴頭孔徑當做設定參考才好.層高應該只要設定成 ...
- ::before 伪元素三角
ul::before{ content: ''; width:; height:; border: 10px solid transparent; border-bottom: 10px solid ...
- android使用ARouter跳转activity(阿里巴巴开源的)
android使用ARouter跳转activity(阿里巴巴开源的) 使用ARouter方式,点击按钮跳转到其他activitypublic void buyOrSell(String str){ ...
- oracle函数,游标,视图使用总结
oracle函数或者叫存储过程,在实际的开发过程中对于复杂的业务需求是非常有用的,非常有效率的也是非常好玩儿的一个技术点. 平常在开发过程中对于CRUD功能较多.一般SQL即可应付,大不了就是长一点而 ...
- HDU 1846 Brave Game (巴什博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1846 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏& ...
- kali linux DIY
开启你的kali linux DIY之旅 感谢原博主的分享,真的非常非常受用! 更新源 首先 是kali2016.2更新源的问题,网上找了好久,都不是很满意.后来把kali 2016.2安装到实体机中 ...
- 巧用ELK快速实现网站流量监控可视化
前言 本文可能不会详细记录每一步实现的过程,但一定程度上可以引领小伙伴走向更开阔的视野,串联每个环节,呈现予你不一样的效果. 业务规模 8个平台 100+台服务器 10+个集群分组 微服务600+ 用 ...
- pyqt5 界面切换
QStackedWidget 只需要关联好对应的信号和槽,调用setCurrentIndex函数,想切哪个界面就切到哪个界面