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的更多相关文章

  1. D. Mysterious Present (看到的一个神奇的DP,也可以说是dfs)

    D. Mysterious Present time limit per test 2 seconds memory limit per test 64 megabytes input standar ...

  2. Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present 记忆化搜索

    D. Mysterious Present 题目连接: http://www.codeforces.com/contest/4/problem/D Description Peter decided ...

  3. dp--C - Mysterious Present

    C - Mysterious Present Peter decided to wish happy birthday to his friend from Australia and send hi ...

  4. D - Mysterious Present

    这个题和求最长递增序列的题类似,为了能输出一组可行的数据,我还用了一点儿链表的知识. Description Peter decided to wish happy birthday to his f ...

  5. 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 ...

  6. [SDOI2010] 所驼门王的宝藏 [建图+tarjan缩点+DAG dp]

    题面传送门: 传送门 思路: 看完题建模,容易得出是求单向图最长路径的问题 那么把这张图缩强联通分量,再在DAG上面DP即可 然而 这道题的建图实际上才是真正的考点 如果对于每一个点都直接连边到它所有 ...

  7. CF459E Pashmak and Graph (Dag dp)

    传送门 解题思路 \(dag\)上\(dp\),首先要按照边权排序,然后图都不用建直接\(dp\)就行了.注意边权相等的要一起处理,具体来讲就是要开一个辅助数组\(g[i]\),来避免同层转移. 代码 ...

  8. Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present(LIS)

    传送门 题意: 现在我们有 n 个信封,然后我们有一张卡片,并且我们知道这张卡片的长和宽. 现给出这 n 个信封的长和宽,我们想形成一个链,这条链的长度就是这条链中所含有的信封的数量: 但是需要满足① ...

  9. Codeforces4D - Mysterious Present(LIS)

    题目大意 给你一张宽为w,长为h的的贺卡,然后给你n个信封,每个信封宽为wi,长为hi,问你最多能在贺卡上嵌套多少个信封,如果某个信封i如果能够装在信封j里,当且仅当w[i]<w[j]& ...

随机推荐

  1. leetcode c++做题思路和题解(5)——堆的例题和总结

    堆和优先队列 堆的简介, 是一种二叉树, 有最大堆和最小堆miniheap. 通常用于构建优先队列. 0. 目录 数据流中的第K大元素 1. 数据流中的第K大元素 数据流中的第K大元素 复杂度为log ...

  2. mybatis源码配置文件解析之二:解析settings标签

    在前边的博客中分析了mybatis解析properties标签,<mybatis源码配置文件解析之一:解析properties标签>.下面来看解析settings标签的过程. 一.概述 在 ...

  3. Springboot:员工管理之登录、拦截器(十(4))

    1:构建登录javaBean com\springboot\vo\LoginUser.java package com.springboot.vo; import lombok.Data; @Data ...

  4. tensorflow1.0 队列FIFOQueue管理实现异步读取训练

    import tensorflow as tf #模拟异步子线程 存入样本, 主线程 读取样本 # 1. 定义一个队列,1000 Q = tf.FIFOQueue(1000,tf.float32) # ...

  5. 新建MapReduce项目

    添加各种jar包 /usr/local/hadoop/share/hadoop/.. 这几个文件夹下的jar包以及它们子目录lib下的所有jar包 将/usr/local/hadoop/etc/had ...

  6. JavaScript type="text/template"的用法

    JavaScript type="text/template"相当于定义一个模板,如果没有使用html()方法的话,是显示不出来的,我们直接看例子(我是在tp框架的里面写的) &l ...

  7. Vsftp用户限制

    背景 Oracle全库备份,异地备份 在实现异地备份后,由第三方人员登录服务器拉取dmp文件. 为了确保安全,创建一个特定ftp账号用于第三方人员使用 要求 1.可以登录服务器 2.可以拉取dmp文件 ...

  8. 如何在没有安装 Python 的机器上运行 Python 程序

    cmd 命令 1. pip install pyinstaller 2. pyinstaller <path to your prog.py> 3. 应用程序在prog.py同路径下的 d ...

  9. Hexo博客插入图片的方法

    Hexo博客插入图片的方法 hexo图片blog hexo blog 插入图片的方法总结 hexo 的blog 内容是根据 markdown 文件的内容生成的html文件, 生成的文件全部在 /pub ...

  10. SpringBoot应用操作Rabbitmq(direct高级操作)

    一.首先声明完成任务架构,通过direct订阅/发布的模式进行生产消费. a.消息生产指定交换器和路由key b.消费者绑定交换器,路由key和队列的关系(集群监控收到的消息不重复) 二.实战演练 1 ...