题目大意:给你一个序列,你可以翻转任意一段子序列一次,求最长不下降子序列长度

tips:子序列可以不连续,但不能破坏在原序列中的顺序

观察数据范围,n<=50,很小,考虑dfs

*dfs来跑区间dp可以巧妙的解决区间两端元素的置换问题

记忆化搜索,f[i][j][l][r] 代表对于区间[i,j],构成最长不下降子序列的元素值域在[l,r]时,最长不下降子序列的长度

注意特判端点

 #include <bits/stdc++.h>
#define N 55
#define inf 0x3f3f3f3f
using namespace std; int n,m;
int a[N],f[N][N][N][N];
int dfs(int i,int j,int l,int r)
{
int ans=-;
if(f[i][j][l][r]!=-) {return f[i][j][l][r];}
if(l>r) {return -;}
if(i>j) {return ;}
if(i==j&&l<=a[i]&&a[i]<=r) {f[i][j][l][r]=;return ;}
if(i==j&&(a[i]<l||a[i]>r)) {f[i][j][l][r]=;return ;}
ans=max(ans,dfs(i+,j,l,r));
ans=max(ans,dfs(i,j-,l,r));
ans=max(ans,dfs(i+,j-,l,r));
if(l<=a[i]&&a[i]<=r) {ans=max(ans,dfs(i+,j,a[i],r)+);}
if(l<=a[j]&&a[j]<=r) {ans=max(ans,dfs(i,j-,l,a[j])+);}
if(l<=a[i]&&a[i]<=a[j]&&a[j]<=r) {ans=max(ans,dfs(i+,j-,a[i],a[j])+);} if(l<=a[j]) {ans=max(ans,dfs(i+,j-,a[j],r)+);}
if(a[i]<=r) {ans=max(ans,dfs(i+,j-,l,a[i])+);}
if(r>=a[i]&&a[i]>=a[j]&&a[j]>=l) {ans=max(ans,dfs(i+,j-,a[j],a[i])+);}
f[i][j][l][r]=max(,ans);
return ans;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{scanf("%d",&a[i]);}
memset(f,-,sizeof(f));
printf("%d",dfs(,n,,));
return ;
}

[USACO17JAN] Subsequence Reversal序列反转 (dfs+记忆化)的更多相关文章

  1. [USACO17JAN]Subsequence Reversal序列反转

    题目描述 Farmer John is arranging his NN cows in a line to take a photo (1 \leq N \leq 501≤N≤50). The he ...

  2. 不要62 hdu 2089 dfs记忆化搜索

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意: 给你两个数作为一个闭区间的端点,求出该区间中不包含数字4和62的数的个数 思路: 数位dp中 ...

  3. dfs+记忆化搜索,求任意两点之间的最长路径

    C.Coolest Ski Route 题意:n个点,m条边组成的有向图,求任意两点之间的最长路径 dfs记忆化搜索 #include<iostream> #include<stri ...

  4. hdu 1078 FatMouse and Cheese (dfs+记忆化搜索)

    pid=1078">FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/ ...

  5. hdu 1078(dfs记忆化搜索)

    题意:容易理解... 思路:我开始是用dfs剪枝做的,968ms险过的,后来在网上学习了记忆化搜索=深搜形式+dp思想,时间复杂度大大降低,我个人理解,就是从某一个点出发,前面的点是由后面的点求出的, ...

  6. UVA 10400 Game Show Math (dfs + 记忆化搜索)

    Problem H Game Show Math Input: standard input Output: standard output Time Limit: 15 seconds A game ...

  7. 8636 跳格子(dfs+记忆化搜索)

    8636 跳格子 该题有题解 时间限制:2457MS  内存限制:1000K提交次数:139 通过次数:46 题型: 编程题   语言: G++;GCC Description 地上有一个n*m 的数 ...

  8. P1433 吃奶酪(搜索DFS+记忆化)

    emmmmm,我还是看了题解的....尴尬,其实不用记忆化搜索也是可以的.因为我不用也是最后一个点超时.但是我是用的贪心+DFS...超时的原因是贪心....mmp,本来加贪心就是为了不超时.... ...

  9. POJ 1088 滑雪(模板题 DFS+记忆化)

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

随机推荐

  1. [bzoj 2726] 任务安排 (斜率优化 线性dp)

    3月14日第三题!!!(虽然是15号发的qwq) Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3-N.这N个任务被分成若干批 ...

  2. 中国电信线CTF线下选拨writeup

    [盟军密码|30分] 二战时盟军截获德军一段密码,密文为:0000011000000000101010110111000011000111100011110001001100111000111001( ...

  3. vue 如何清除定时器

    在页面中需要定时刷新局部数据,在数据变化是否频繁的情况下,没有必要使用webSocket,因为数据变化频繁,数据实时变化太快看不清楚.因此页面会定时调用后台接口以达到实时刷新数据的效果. 1.在dat ...

  4. django-6-数据库配置及模型创建,激活(django模型系统1)

    <<<数据库的连接配置>>> django配置mysql的流程: 1.创建数据库用户 (1)进入MySQL数据库    (2)创建有数据库权限的用户 (3)退出My ...

  5. JAVA基础知识复习小结

    集合 Set集合 Set集合的基本特征是元素不允许重复.HashSet不保存元素顺序,LinkedHashSet用链表保持元素的插入顺序,TreeSet可定制排序规则. HashSet的底层是用Has ...

  6. FCN图像分割

    一. 图像语义分割 传统的图像分割方法主要包括以下几种: 1)基于边缘检测 2)基于阈值分割 比如直方图,颜色,灰度等 3)水平集方法 这里我们要说的是语义分割,什么是语义分割呢?先来看张图: 将目标 ...

  7. (5)全局异常捕捉【从零开始学Spring Boot】

    在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ...

  8. 使用angularjs的$http.post异步提交数据时,服务器接收不了的问题

    一,在正常情况下,使用表单的post方法提交数据,默认请求头的Content-Type:application/x-www-form-urlencoded类型, 提交数据格式如下: 二,使用angul ...

  9. 完整的html+css+javascript实现跟随鼠标移动显示选中效果

    1,显示效果: 2,html结构 <div class="process_list-lpu"> <div class="process_line&quo ...

  10. CF899A Splitting in Teams

    CF899A Splitting in Teams 题意翻译 n个数,只有1,2,把它们任意分组,和为3的组最多多少 题目描述 There were nn groups of students whi ...