Codeforces gym 101291 M (最长交替子序列)【DP】
<题目链接>
题目大意:
给你一段序列,要求你求出该序列的最长交替子序列,所谓最长交替子序列就是,这段序列的相邻三项必须是先递增再递减或者先递减再递增这样交替下去。
解题分析:
这与一道dp的典型题求最长上升子序列有点相似,不同的是本题是需要子序列相邻两项需要交替变换,所以在原来的基础上做一些改动,用两个dp数组,分别记录起始状态是递增和起始状态是递减的情况,然后就是根据dp的奇偶性来判断这一步是递增还是递减。
#include <cstdio>
#include <cstring> int max(int a,int b){return a>b?a:b;} int main(){
int arr[110];
int n;scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&arr[i]);
}
int dp1[110],dp2[110];
for(int i=1;i<=n;i++){ //记得初始化
dp1[i]=1,dp2[i]=1; //dp1[i]表示先增后减的最长上升子序列,dp2[i]表示先减后增的最长上升子序列
}
for(int i=2;i<=n;i++){
for(int j=1;j<i;j++){
//dp1[]代表的是起始状态是上升的
if(dp1[j]%2==1){ //如果dp1[j]为奇,则说明这一步应该上升
if(arr[j]<arr[i]&&(dp1[j]+1)>dp1[i]){
dp1[i]=dp1[j]+1;
}
}
else{
if(arr[j]>arr[i]&&(dp1[j]+1)>dp1[i]){
dp1[i]=dp1[j]+1;
}
}
//dp2[]代表起始状态是下降的
if(dp2[j]%2==1){ //如果dp2[j]为奇,则说明这一步应该下降
if(arr[j]>arr[i]&&(dp2[j]+1)>dp2[i]){
dp2[i]=dp2[j]+1;
}
}
else{
if(arr[j]<arr[i]&&(dp2[j]+1)>dp2[i]){
dp2[i]=dp2[j]+1;
}
} }
} int mx=-0x3f;
for(int i=1;i<=n;i++){
mx=max(max(mx,dp1[i]),dp2[i]);
}
printf("%d\n",mx);
return 0;
}
Codeforces gym 101291 M (最长交替子序列)【DP】的更多相关文章
- codeforces E. The Contest(最长上升子序列)
题目链接:https://codeforces.com/contest/1257/problem/E 题意:给三个序列k1,k2,k3,每个序列有一堆数,k1是前缀,k3是后缀,k2是中间,现可以从任 ...
- POJ-2533最长上升子序列(DP+二分)(优化版)
Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 41944 Acc ...
- LCS最长公共子序列~dp学习~4
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 Palindrome Time Limit: 4000/2000 MS (Java/Others ...
- Longest Ordered Subsequence POJ - 2533 最长上升子序列dp
题意:最长上升子序列nlogn写法 #include<iostream> #include<cstdio> #include<cstring> #include&l ...
- POJ 1458 最长公共子序列(dp)
POJ 1458 最长公共子序列 题目大意:给出两个字符串,求出这样的一 个最长的公共子序列的长度:子序列 中的每个字符都能在两个原串中找到, 而且每个字符的先后顺序和原串中的 先后顺序一致. Sam ...
- 【BZOJ2423】[HAOI2010]最长公共子序列 DP
[BZOJ2423][HAOI2010]最长公共子序列 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...
- hdu 1159 Common Subsequence(最长公共子序列 DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
- 38-最长公共子序列(dp)
最长公共子序列 https://www.nowcoder.com/practice/c996bbb77dd447d681ec6907ccfb488a?tpId=49&&tqId=293 ...
- 最长公共子序列 DP
class Solution: def LCS(self,A,B): if not A or not B: #边界处理 return 0 dp = [[0 for _ in range(len(B)+ ...
随机推荐
- Confluence 6 home 目录
Confluence Home 目录是存储 Confluence 信息,查找索引,页面附件的地方.其实 Home 目录也可以定义为数据目录. 找到 Home 目录 Confluence 的 home ...
- Confluence 6 WebDAV 禁用严格路径检查
如果你在你的 WebDAV 客户端发现了一些不正常的现象,例如文件夹在 Confluence 中是存在的,但是在你客户端下载的文件中就不存在了.你可以禁用 WebDAV 插件中的严格路径检查选项,这 ...
- Confluence 6 基于 Confluence 数据中心的 SAML 单点登录
安全申明标记语言(Security Assertion Markup Language (SAML))是一个基于 XML 的数据格式,允许各个软件平台通过identity provider (IdP) ...
- RefineDet算法笔记
---恢复内容开始--- 一.创新点 针对two-stage的速度慢以及one-stage精度不足提出的方法,refinedet 包括三个核心部分:使用TCB来转换ARM的特征,送入ODM中进行检测: ...
- 如何在cmd中执行python文件
打开cmd终端 输入python 然后再输入要执行文件的路径 就可以把python文件运行起来 ...
- Vue中使用Vue.component定义两个全局组件,用单标签应用组件时,只显示一个组件的问题和 $emit的使用。
解决方法: 定义了两个 Vue.component 在 el 中使用的时候要用 双标签, 用单表标签的时候,只会显示第个 组件间 这样写只显示 welcome-button 组件 <welcom ...
- java运行环境增加字体
背景 今天在使用jfreeChart时,显示中文乱码,如下图: 环境:Ubuntu 13.04 64bit java7 tomcat 7.0.42 解决方法--增加系统字体 0. 安装环境包 su ...
- nodejs 环境安装
参考网站 http://www.runoob.com/nodejs/nodejs-http-server.html https://github.com/nodesource/distribution ...
- 函数函数sigaction、signal
函数函数sigaction 1. 函数sigaction原型: int sigaction(int signum, const struct sigaction *act, struct sigact ...
- INFO JobScheduler: Added jobs for time 1524468752000 ms/INFO MemoryStore: Block input-0-1524469143000 stored as bytes in memory/完全分布式 ./bin/run-example streaming.NetworkWordCount localhost 9999无法正常运行
1.完全分布式 ./bin/run-example streaming.NetworkWordCount localhost 9999无法正常运行: 1 [hadoop@slaver1 spark- ...