最长上升子序列(LIS) dp典型例题(tzoj 矩形嵌套,Rectangles )
5985: 矩形嵌套
题意:求最长递增子序列(包含两个元素)
思路:先找出关系式子;
li=lj+1(当ai<aj时)
两层循环 第一层i从1-n
第二层j 从0-i ;求出i前面的每个j 的max长度再加上自己即1 so要初始化dp【0-n】=1
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;
}qu[1005];
bool cmp(node a,node b)
{
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
int dp[1005];
int main()
{
int t,n,i,j;
cin>>t;
while(t--){
cin>>n;
for(i=0;i<n;i++){
int u,v;cin>>u>>v;
qu[i].x=min(u,v);
qu[i].y=max(u,v);
dp[i]=1;
}
sort(qu,qu+n,cmp);
for(i=1;i<n;i++){
for(j=0;j<i;j++){
// cout<<i<<" i-j "<<j<<" ";
if(qu[j].x<qu[i].x&&qu[j].y<qu[i].y){
// cout<<dp[i]<<" "<<dp[j]+1;
dp[i]=max(dp[i],dp[j]+1);
}
// cout<<endl;
}
}
int maxx=dp[0];
for(i=1;i<n;i++)maxx=max(maxx,dp[i]);
cout<<maxx<<endl;
}
return 0;
}
3229: Rectangles
解法同上
#include<bits/stdc++.h>
using namespace std;
struct node{
int x1,y1,x2,y2;
}qu[1005];
bool cmp(node a,node b)
{
return a.x1<b.x1|| a.x1==b.x1&&a.y1<b.y1|| a.x1==b.x1&&a.y1==b.y1&&a.x2<b.x2|| a.x1==b.x1&&a.y1==b.y1&&a.x2==b.x2&&a.y2<b.y2;
}
int dp[1005];
int main()
{
int t,n,i,j;
while(scanf("%d",&n),n!=0){
for(i=0;i<n;i++){
scanf("%d%d%d%d",&qu[i].x1,&qu[i].y1,&qu[i].x2,&qu[i].y2);
dp[i]=1;
}
sort(qu,qu+n,cmp);
for(i=1;i<n;i++){
for(j=0;j<i;j++){
if(qu[j].x2<qu[i].x1&&qu[j].y2<qu[i].y1){
dp[i]=max(dp[i],dp[j]+1);
}
}
}
int maxx=dp[0];
for(i=1;i<n;i++)maxx=max(maxx,dp[i]);
printf("%d\n",maxx);
}
return 0;
}
这题也可以用记忆化搜索
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1005;
struct p{
int x1,x2,y1,y2;
}rec[N];
int vis[N][N],res[N],n;
int dfs(int u)
{
if(res[u]) return res[u];
for(int i=0;i<n;i++)
if(vis[u][i]) res[u]=max(res[u],dfs(i)+1);
res[u]=max(res[u],1);
return res[u];
}
void init()
{
memset(vis,0,sizeof(vis));
memset(res,0,sizeof(res));
}
int main()
{
while(~scanf("%d",&n),n)
{
init();
for(int i=0;i<n;i++) scanf("%d%d%d%d",&rec[i].x1,&rec[i].y1,&rec[i].x2,&rec[i].y2);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(rec[i].x2<rec[j].x1&&rec[i].y2<rec[j].y1) vis[i][j]=1;
int ans=0;
for(int i=0;i<n;i++)
ans=max(ans,dfs(i));
printf("%d\n",ans);
}
}
最长上升子序列(LIS) dp典型例题(tzoj 矩形嵌套,Rectangles )的更多相关文章
- 动态规划(DP),最长递增子序列(LIS)
题目链接:http://poj.org/problem?id=2533 解题报告: 状态转移方程: dp[i]表示以a[i]为结尾的LIS长度 状态转移方程: dp[0]=1; dp[i]=max(d ...
- 1. 线性DP 300. 最长上升子序列 (LIS)
最经典单串: 300. 最长上升子序列 (LIS) https://leetcode-cn.com/problems/longest-increasing-subsequence/submission ...
- 最长回文子序列LCS,最长递增子序列LIS及相互联系
最长公共子序列LCS Lintcode 77. 最长公共子序列 LCS问题是求两个字符串的最长公共子序列 \[ dp[i][j] = \left\{\begin{matrix} & max(d ...
- 最长上升子序列LIS(51nod1134)
1134 最长递增子序列 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递 ...
- 最长上升子序列(LIS)与最长公共子序列(LCS)
1.LIS : 给定一个序列,求它的最长上升子序列(n<=2000) 第一种 O(n^2): dp[i] 为以i为开头的最长上升子序列长度 code1: #include<cstdio&g ...
- 【部分转载】:【lower_bound、upperbound讲解、二分查找、最长上升子序列(LIS)、最长下降子序列模版】
二分 lower_bound lower_bound()在一个区间内进行二分查找,返回第一个大于等于目标值的位置(地址) upper_bound upper_bound()与lower_bound() ...
- 2.16 最长递增子序列 LIS
[本文链接] http://www.cnblogs.com/hellogiser/p/dp-of-LIS.html [分析] 思路一:设序列为A,对序列进行排序后得到B,那么A的最长递增子序列LIS就 ...
- 题解 最长上升子序列 LIS
最长上升子序列 LIS Description 给出一个 1 ∼ n (n ≤ 10^5) 的排列 P 求其最长上升子序列长度 Input 第一行一个正整数n,表示序列中整数个数: 第二行是空格隔开的 ...
- POJ - 1631 Bridging signals(最长上升子序列---LIS)
题意:左右各n个端口,已知n组线路,要求切除最少的线路,使剩下的线路各不相交,按照左端口递增的顺序输入. 分析: 1.设左端口为l,右端口为r,因为左端口递增输入,l[i] < l[j](i & ...
- 一个数组求其最长递增子序列(LIS)
一个数组求其最长递增子序列(LIS) 例如数组{3, 1, 4, 2, 3, 9, 4, 6}的LIS是{1, 2, 3, 4, 6},长度为5,假设数组长度为N,求数组的LIS的长度, 需要一个额外 ...
随机推荐
- docker创建etcd
创建docker-compose.yml version: "3.5" services: etcd: hostname: etcd image: bitnami/etcd:3 d ...
- 何同学新视频火了!找到减少沉迷手机的最佳方法:附免费APP
以优质原创视频吸引百万粉丝的 Up 主"何同学"昨晚(1 月 6 日)上线了最新作品,探讨了如何有效地减少现代人使用或者说沉迷手机的时间. 在视频开头,何同学提到,整理了 5000 ...
- 01_Node的版本管理
Node的版本管理工具 常见的node的版本管理工具有两种N.NVM 但是他们有一个致命的问题就是不支持Windwos 但是NVM延申了一个nvm-windows的版本,他就可以很好的支持window ...
- 《《《PLSQL Developer编辑器怎么设置圆括号高亮
转载:PLSQL Developer编辑器怎么设置圆括号高亮-百度经验 (baidu.com) 为了在plsql中调代码好调 LSQL Developer编辑器怎么设置圆括号高亮?有时候对PLSQL ...
- ES-索引库
数据准备 本次学习涵盖ES简单查询,聚合查询,所以在创建测试库时会可以涵盖一些个性化字段,用于学习搜索用法 索引创建 几个疑问 1.能否用中文命名 安排:我用"蓝闪test",中英 ...
- Linux常用的操作指令01
关键字: linux 查进程.杀进程.起进程1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序. ps -A 显示所有程序. ...
- 动手学强化学习 第二章 多臂tiger机问题 阅读笔记
第二章 多臂tiger机问题 第一节 简介 强化学习是一种试错型学习范式. 第二节 问题介绍 多臂tiger机(multi-armed bandit,MAB)不存在状态信息,只有动作和奖励.有一个拥有 ...
- CMake配置跨平台项目踩的坑
当要在windows平台下使用MinGW作为cmake使用的make平台时,需要确保cmake能够在系统环境变量PATH中找到MinGW的bin目录,如果PATH中没有MinGW的话可以在CMakeL ...
- Django-django-celery的配置
1.安装django-celery pip install django-celery 2.添加配置 demos/demos/settings.py(我的项目名为demos,这里只是示范,切勿搞混 ...
- Redis缓存雪崩,击穿和穿透
这三个问题的发生,会导致大量的请求直接积压到数据库,如果并发量很大,则可能会导致数据库宕机或故障. 缓存雪崩 描述:大量的请求无法在redis缓存中进行处理而被发送到数据库,导致数据库压力陡增. ...