D. Mysterious Present DAG dp
https://codeforces.com/problemset/problem/4/D
这个题目比较简单,就是一个DAG模型,这个可以看看紫书学习一下,
我这次是用dp来写的,用记忆化搜索也许更好写一点。
这个首先进行建图,用一个邻接表建图,G[i][j]表示第i个信封可以装进去第j个信封,这个再建图之前需要排序。
不然的话就不好写这个dp了,其实这里有一点点不太能理解。
建完图之后就是dp的转移,
dp[i]表示从第i个信封开始可以装的最多的信封
状态转移就是 d[i]=dp[j]+1
这个之后就是路径的输出,这个路径输出需要好好理解,
第一个就是怎么找到第一个数值,这个是一个for循环找到一个dp[i]==ans
然后就是递归找答案。
这个递归需要break,这个自行理解吧。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<vector>
#define inf 0x3f3f3f3f
#define debug(x) cout<<"-----"<<" x = "<<x<<"-----"<<endl
using namespace std;
typedef long long ll;
const int maxn = 5e3 + ;
struct node
{
int x, y, id;
node(int x=,int y=):x(x),y(y){}
}a[maxn]; bool cmp(node a,node b)
{
return a.x < b.x;
}
int n, w, h;
bool G[maxn][maxn];
void build()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if (a[i].x > a[j].x&&a[i].y > a[j].y&&a[j].x > w&&a[j].y > h)
{
G[i][j] = ;
}
if (a[i].x > w&&a[i].y > h) G[i][] = ;
}
}
}
int dp[maxn];//表示从第i个可以嵌套的数量 void print_ans(int i)
{
for (int j = ; j <= n; j++)
{
if (G[i][j] && dp[i] == dp[j] + )
{
print_ans(j);
break;
}
}
printf("%d ", a[i].id);
} int main()
{
scanf("%d%d%d", &n, &w, &h);
for (int i = ; i <= n; i++)
{
scanf("%d%d", &a[i].x, &a[i].y), a[i].id = i;
}
sort(a + , a + + n, cmp);
build();
int ans = ;
memset(dp, , sizeof(dp));
for(int i=;i<=n;i++)
{
if(G[i][]) dp[i] = ;
for(int j=;j<=i;j++)
{
if (G[i][j]&&G[i][]) dp[i] = max(dp[i], dp[j]+);
}
ans = max(dp[i], ans);
}
printf("%d\n", ans);
int b = ;
for (int i = ; i <= n; i++) if (dp[i] == ans&&G[i][]) b = i;
if(b) print_ans(b);
return ;
}
D. Mysterious Present DAG dp的更多相关文章
- D. Mysterious Present (看到的一个神奇的DP,也可以说是dfs)
D. Mysterious Present time limit per test 2 seconds memory limit per test 64 megabytes input standar ...
- Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present 记忆化搜索
D. Mysterious Present 题目连接: http://www.codeforces.com/contest/4/problem/D Description Peter decided ...
- dp--C - Mysterious Present
C - Mysterious Present Peter decided to wish happy birthday to his friend from Australia and send hi ...
- D - Mysterious Present
这个题和求最长递增序列的题类似,为了能输出一组可行的数据,我还用了一点儿链表的知识. Description Peter decided to wish happy birthday to his f ...
- Codeforces Round #460 (Div. 2): D. Substring(DAG+DP+判环)
D. Substring time limit per test 3 seconds memory limit per test 256 megabytes input standard input ...
- [SDOI2010] 所驼门王的宝藏 [建图+tarjan缩点+DAG dp]
题面传送门: 传送门 思路: 看完题建模,容易得出是求单向图最长路径的问题 那么把这张图缩强联通分量,再在DAG上面DP即可 然而 这道题的建图实际上才是真正的考点 如果对于每一个点都直接连边到它所有 ...
- CF459E Pashmak and Graph (Dag dp)
传送门 解题思路 \(dag\)上\(dp\),首先要按照边权排序,然后图都不用建直接\(dp\)就行了.注意边权相等的要一起处理,具体来讲就是要开一个辅助数组\(g[i]\),来避免同层转移. 代码 ...
- Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present(LIS)
传送门 题意: 现在我们有 n 个信封,然后我们有一张卡片,并且我们知道这张卡片的长和宽. 现给出这 n 个信封的长和宽,我们想形成一个链,这条链的长度就是这条链中所含有的信封的数量: 但是需要满足① ...
- Codeforces4D - Mysterious Present(LIS)
题目大意 给你一张宽为w,长为h的的贺卡,然后给你n个信封,每个信封宽为wi,长为hi,问你最多能在贺卡上嵌套多少个信封,如果某个信封i如果能够装在信封j里,当且仅当w[i]<w[j]& ...
随机推荐
- intellJ svn控制错误
电脑突然蓝屏了,重启打开intellj 后原本好好的项目是可以用intellj更新或者提交的,现在却都不能了,如图: 如上图:svn地址里是空白的,应该显示: 那到底是什么情况呢,就因为电脑崩溃了in ...
- 数据结构和算法(Golang实现)(13)常见数据结构-可变长数组
可变长数组 因为数组大小是固定的,当数据元素特别多时,固定的数组无法储存这么多的值,所以可变长数组出现了,这也是一种数据结构.在Golang语言中,可变长数组被内置在语言里面:切片slice. sli ...
- 【Android】EventReminder使用教程(日历事件导出封装库)
碎碎念 为啥要写这个库呢? 尝试自己写一个库调用,学习一下这个流程,为以后做准备 日历库在网上的资料太少了,而这个功能却又很实用 自己做的项目都会涉及到事件导出功能,不想重复写代码 使用方法 引入 在 ...
- Problem L. World Cup
题目大意:有A,B,C,D四个队伍,两两之间有一个比赛,假如A和B比赛,如果平局,各加一分,如果说A胜,给A加3分,不给B加分,B胜同理 给出A,B,C,D,的得分,判断形成这种局面有多少种方式. 思 ...
- 今天开始让我们一起来学JavaScript吧!(今天先扯先别的)
1.为什么要学习JavaScript? 首先它是web开发人员必须学习的3门语言之一: ①HTML定义了网页的内容 ②CSS描述了网页的布局: ③JavaScript网页的行为 首先JavaScrip ...
- Linux编辑利器-Vim
在大学时代,Vim 的大名就已如雷贯耳,但由于它陡峭的学习曲线,一直望而却步.等真正开始学习之后,发现并没有想象中的复杂,也没有所谓的瓶颈,只要在实际写代码中强迫自己使用就可以了,无形中就会形成习惯. ...
- react: typescript system params optimize
1.system-params-service import paramCache from "../common/param-cache" import RequestPromi ...
- VSCode六大通用插件真香合集
目录 一.background:设置心水背景图 安利理由: 安装及设置步骤: 设置过程中使用的代码: 成果展示: 注意: 二.Material Theme(VSCode主题)+Material Ico ...
- 尝试用Vue.js开发网页小游戏的过程
准备 首先去官方下载并安装VSCODE,下载地址 https://code.visualstudio.com/.安装后打开会发现是英文版的,需要去安装插件来汉化.具体是在扩展插件搜索chinese,选 ...
- Deepin15.11-mysql5.7安装与配置
目录 1.卸载 2.换源 3.安装mysql-5.7并修改密码 4.修改mysql中字符编码 deepin系统中,默认的系统源,使用apt-get install mysql-server会自动拉取m ...