[USACO17JAN] Subsequence Reversal序列反转 (dfs+记忆化)
题目大意:给你一个序列,你可以翻转任意一段子序列一次,求最长不下降子序列长度
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+记忆化)的更多相关文章
- [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 ...
- 不要62 hdu 2089 dfs记忆化搜索
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意: 给你两个数作为一个闭区间的端点,求出该区间中不包含数字4和62的数的个数 思路: 数位dp中 ...
- dfs+记忆化搜索,求任意两点之间的最长路径
C.Coolest Ski Route 题意:n个点,m条边组成的有向图,求任意两点之间的最长路径 dfs记忆化搜索 #include<iostream> #include<stri ...
- hdu 1078 FatMouse and Cheese (dfs+记忆化搜索)
pid=1078">FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...
- hdu 1078(dfs记忆化搜索)
题意:容易理解... 思路:我开始是用dfs剪枝做的,968ms险过的,后来在网上学习了记忆化搜索=深搜形式+dp思想,时间复杂度大大降低,我个人理解,就是从某一个点出发,前面的点是由后面的点求出的, ...
- UVA 10400 Game Show Math (dfs + 记忆化搜索)
Problem H Game Show Math Input: standard input Output: standard output Time Limit: 15 seconds A game ...
- 8636 跳格子(dfs+记忆化搜索)
8636 跳格子 该题有题解 时间限制:2457MS 内存限制:1000K提交次数:139 通过次数:46 题型: 编程题 语言: G++;GCC Description 地上有一个n*m 的数 ...
- P1433 吃奶酪(搜索DFS+记忆化)
emmmmm,我还是看了题解的....尴尬,其实不用记忆化搜索也是可以的.因为我不用也是最后一个点超时.但是我是用的贪心+DFS...超时的原因是贪心....mmp,本来加贪心就是为了不超时.... ...
- POJ 1088 滑雪(模板题 DFS+记忆化)
Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
随机推荐
- 【JavaScript框架封装】数据类型检测模块功能封装
数据类型检测封装后的最终模块代码如下: /*数据类型检验*/ xframe.extend(xframe, { // 鸭子类型(duck typing)如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭 ...
- Project Euler 2 Even Fibonacci numbers
题意:斐波那契数列中的每一项都是前两项的和.由1和2开始生成的斐波那契数列前10项为:1, 2, 3, 5, 8, 13, 21, 34, 55, 89, -考虑该斐波那契数列中不超过四百万的项,求其 ...
- [NoiPlus2016]天天爱跑步
巨坑 树剖学的好啊!---sfailsth 把一段路径拆成两段,向上和S->LCA,向下LCA->T 用维护重链什么的操作搞一下. sfailsth学长真不容易啊...考场上rush了4. ...
- 批量删除.svn目录
find . -type d -name ".svn"|xargs rm -rf find . -type d -iname ".svn" -exec rm - ...
- 小松之LINUX驱动学习笔记之模块间函数调用通讯
1. 符号导出函数 EXPORT_SYMBOL() EXPORT_SYMBOL标签内定义的函数对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用. EXPORT_SYMBOL_GPL( ...
- python第二周:数据类型、列表、字典
1.模块初识: sys模块: import sys print(sys.path) #path打印环境变量--> ['F:\\python学习\\projects\\s14\\day2', 'F ...
- 【hdu 4135】Co-prime
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=4135 [题意] 让你求出[a..b]这个区间内和N互质的数的个数; [题解] 利用前缀和,求出[1 ...
- linux_ubuntu 连接xftp
一.修改静态ip 打开网络配置文件 :vim /etc/network/interfaces 1.添加以下配置: 注意:ubuntu 网卡名为 ens33 .多数liunx系统的网卡名为eth0. 可 ...
- CF149D 区间dp
http://codeforces.com/problemset/problem/149/D D. Coloring Brackets time limit per test 2 seconds me ...
- cocos2d 3.3 lua 代码加密 luac
1.0 cocos luacompile 使用方法 我用的普通的cocos2d lua,没用quick,quick好像能够对整个资源包含图像和音频都加密,打包成zip.我看了下luacompile 的 ...