6357.

Hills And Valleys

自己感觉这是个好题,应该是经典题目,所以半路选手补了这道字符串的动态规划题目。

题意就是给你一个串,翻转任意区间一次,求最长的非下降子序列。

一看题面写的0≤Ai≤9 (i=1,2,⋯,n).就知道肯定有点东西,只要这么写,肯定就是有某个神奇的操作可以解决这道题目。

比赛的时候脑壳都要炸了也没想出来,补题的时候懂了,我可以定义一个b串为0123456789,这肯定是递增的,所以我翻转b的某个区间,然后去和a匹配,因为我把b再翻转回来,还是递增的。

当然了,因为是非严格的递增子序列,有相等的情况,所以相等的时候判断一下,直接+1就可以了。然后枚举一下b的翻转区间就可以了。因为还要输出翻转的区间,所以在dp的时候,用个数组分别保存一下l,r端点就可以了。其他的没什么。

感觉这种思路还是很值得思考的,不处理a,通过其他的操作间接处理a,以后写题要多想想,也写过类似思路的,通过其他的操作间接得到答案,但是一打比赛就没脑子,mdzz,为什么我这么菜༼༎ຶᴗ༎ຶ༽

参考了其他人的题解写出来的。

首先官方题解:

然后别人的博客:HDU6357——Hills And Valleys

代码:

 //1008-6357-非严格递增子序列(最长非下降子序列)-字符串+dp-区间翻转,r找最长非递减子序列,好题哇
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<bitset>
#include<cassert>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<deque>
#include<iomanip>
#include<list>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
using namespace std;
typedef long long ll; const double PI=acos(-1.0);
const double eps=1e-;
const ll mod=1e9+;
const int inf=0x3f3f3f3f;
const int maxn=1e5+;
const int maxm=+;
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n,a[maxn],dp[maxn][maxm],b[maxm];
int ans,L,R,l,r,h;
int al[maxn][maxm],ar[maxn][maxm]; int solve()
{
for(int i=;i<=h;i++)
dp[][i]=;//初始化
for(int i=;i<=n;i++){//a和b匹配
for(int j=;j<=h;j++){
dp[i][j]=dp[i-][j];
al[i][j]=al[i-][j];//记录左端点
ar[i][j]=ar[i-][j];//记录右端点
if(a[i]==b[j]){//如果有相等的情况,+1
dp[i][j]=dp[i-][j]+;
if(l==j&&!al[i][j])//如果当前的j就是b开始翻转的左端点,更新记录
al[i][j]=i;
if(r==j)//右端点
ar[i][j]=i;
}
if(dp[i][j-]>dp[i][j]){//更新答案
dp[i][j]=dp[i][j-];
al[i][j]=al[i][j-];
ar[i][j]=ar[i][j-];
}
}
}
return dp[n][h];
} char s[maxn]; int main()
{
int t;
scanf("%d",&t);
while(t--){
scanf("%d%s",&n,s+);
for(int i=;i<=n;i++)
a[i]=s[i]-'';
h=;
for(int i=;i<=;i++)
b[++h]=i;
L=R=l=r=;
ans=solve();
for(int i=;i<=;i++){
for(int j=i+;j<=;j++){
h=;
for(int k=;k<=i;k++)
b[++h]=k;//翻转区间的左部分不变
l=h+;
for(int k=j;k>=i;k--)//要翻转的区间把数字翻转
b[++h]=k;
r=h;
for(int k=j;k<=;k++)//反转区间的右部分不变
b[++h]=k;
int tmp=solve();
if(ans<tmp&&al[n][h]&&ar[n][h]){//更新结果
ans=tmp;
L=al[n][h];
R=ar[n][h];
}
}
}
printf("%d %d %d\n",ans,L,R);
}
}

溜了溜了,滚去补数据结构了。

HDU 6357.Hills And Valleys-字符串非严格递增子序列(LIS最长非下降子序列)+动态规划(区间翻转l,r找最长非递减子序列),好题哇 (2018 Multi-University Training Contest 5 1008)的更多相关文章

  1. HDU - 6357 Hills And Valleys(DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=6357 题意 给一个数值范围为0-9的a数组,可以选择翻转一个区间,问非严格最长上升子序列,以及翻转的区间. 分析 ...

  2. HDU 6357 Hills And Valleys

    Hills And Valleys 题意:给你一个序列, 可以翻转一次区间 [l, r] 求最大 非递减的 序列长度. 题解:枚举翻转区间,然后匹配. 如果不翻转区间, 那么就相当于用b[] = {0 ...

  3. HDU 6357.Hills And Valleys-动态规划(区间翻转l,r找最长非递减子序列)

    题意:给一串由n个数字组成的字符串,选择其中一个区间进行翻转,要求翻转后该字符串的最长非降子序列长度最长,输出这个最长非降子序列的长度以及翻转的区间的左右端点 #include<bits/std ...

  4. 2018 Nowcoder Multi-University Training Contest 2

    目录 Contest Info Solutions A. run D. monrey G. transform H. travel I. car J. farm Contest Info Practi ...

  5. 2019 Multi-University Training Contest 2 - 1008 - Harmonious Army - 最大流

    http://acm.hdu.edu.cn/showproblem.php?pid=6598 一开始就觉得是网络流,但是一直都不会怎么建图. 这里要考虑. 每一组边(u,v,a,b,c)建立如下的连接 ...

  6. HDU 6326.Problem H. Monster Hunter-贪心(优先队列)+流水线排序+路径压缩、节点合并(并查集) (2018 Multi-University Training Contest 3 1008)

    6326.Problem H. Monster Hunter 题意就是打怪兽,给定一棵 n 个点的树,除 1 外每个点有一只怪兽,打败它需要先消耗 ai点 HP,再恢复 bi点 HP.求从 1 号点出 ...

  7. HDU 6305.RMQ Similar Sequence-笛卡尔树+数学期望 (2018 Multi-University Training Contest 1 1008)

    6305.RMQ Similar Sequence 这个题的意思就是对于A,B两个序列,任意的l,r,如果RMQ(A,l,r)=RMQ(B,l,r),B序列里的数为[0,1]的实数,B的重量为B的所有 ...

  8. 2015多校联合训练赛 Training Contest 4 1008

    构造题: 比赛的时候只想到:前面一样的数,后面 是类似1,2,3,4,5,6....t这 既是:t+1,t+1...,1,2,3,...t t+1的数目 可能 很多, 题解时YY出一个N 然后对N   ...

  9. 2018 Nowcoder Multi-University Training Contest 10

    Practice Link J. Rikka with Nickname 题意: 给出\(n\)个字符串,要求依次合并两个串\(s, t\),满足将\(t\)合并到\(s\)中变成\(r\),使得\( ...

随机推荐

  1. IE6中png背景图片透明的最好处理方法

    在IE6浏览器下png(24位)的图片显示是不能透明的. 1.处理办法就是用DDPngMin.js <!--[if IE 6]> <script src="js/DDPng ...

  2. 【题解】ZJOI2017仙人掌

    感觉这题很厉害啊,虽然想了一天多但还是失败了……(:д:) 这题首先注意到给定图中如果存在环其实对于答案是没有影响的.然后关键之处就在于两个 \(dp\) 数组,其中 \(f[u]\) 表示以 \(u ...

  3. 莫比乌斯反演题表II

    bzoj3994:[SDOI2015]约数个数和 **很好推+有个小结论bzoj3309:DZY Loves Math ***很好推+线筛某函数/卡常bzoj4816:[Sdoi2017]数字表格 * ...

  4. Linux产生背景

    By francis_hao Oct 26,2016 很久很久以前,大概在1965年左右,由贝尔实验室(Bell).麻省理工学院(MIT)及通用电气公司(GE)共同发起了一个叫做Multics的项目, ...

  5. POJ2492:A Bug's Life(种类并查集)

    A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 45757   Accepted: 14757 题 ...

  6. c++编辑器下载地址

    https://msdn.itellyou.cn/ 输入上述地址选中下图所示的按钮:

  7. checkbox和后面文字无法居中对齐的解决方案

    制作前端页面时,表单的页面中都存在表单元素与提示文字无法对齐的问题.下面是针对这一问题的解决方案: 先上结果图看效果,吼吼~ 最上面两个是经过css处理后的效果,已经居中对齐了哦~,最后一个是没有处理 ...

  8. kettle基础操作

    ETL:抽取(extract).转换(transform).加载(load)至目的端的过程: Kettle是ETL工具代表之一,是pentaho中的一个数据整合的一个组件.Kettle里包括多个Job ...

  9. bzoj1574 [Usaco2009 Jan]地震损坏Damage

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1574 [题解] 贪心把report的点的旁边所有点破坏即可. # include <s ...

  10. R的农场

    R的农场 题目描述 最近,R 终于获得了一片他梦寐以求的农场,但如此大的一片农场,想要做好防卫工作可不是一件容易的事.所以 R 购买了 N 个守卫,分别让他们站在一定的位置上(守卫不可移动,同一位置上 ...