Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present(LIS)
题意:
现在我们有 n 个信封,然后我们有一张卡片,并且我们知道这张卡片的长和宽。
现给出这 n 个信封的长和宽,我们想形成一个链,这条链的长度就是这条链中所含有的信封的数量;
但是需要满足①信封a可以连接信封b当且仅当信封a的长和宽分别严格小于信封b的长和宽。
②构成这条长链的所有信封的长和宽分别严格小于卡片的长和宽。
问最多可以形成多长的链,并且输出我们选取的链的编号;
题解:
DAG上的动态规划;
如果信封对于任意两个信封 a,b 满足上述条件①②,那么连一条由a指向b的有向边;
O(n2)预处理出所有满足条件的(a,b);
求解DAG上的最长路;
正解,nice,可你别忘了,最大需要开 n2 = 25000000 的数组存图,emmm;

然后,不断地试探,最终

啊,最后一个点,翻车了;
出题人也太坏了叭;
正解:首先对于这 n 个信封,按照 w 从小到大排序,然后,找 h 的最长上升子序列;
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define memF(a,b,n) for(int i=0;i <= n;a[i]=b,++i);
const int maxn=5e3+; int n,w,h;
struct Date
{
int w,h;
int id;
bool operator < (const Date& obj) const
{
return w < obj.w;
}
}_date[maxn];
int dp[maxn]; bool isSat(int i,int j)
{
return _date[i].w < _date[j].w && _date[i].h < _date[j].h;
}
void Solve()
{
sort(_date+,_date+n+);
memF(dp,,n);
for(int i=n-;i >= ;--i)
for(int j=i+;j <= n;++j)
if(isSat(i,j))
dp[i]=max(dp[j]+,dp[i]); int ans=;
int cur;
for(int i=;i <= n;++i)
if(isSat(,i) && dp[i] > ans)
{
ans=dp[i];
cur=i;
} printf("%d\n",ans);
if(ans == )
return ; printf("%d",_date[cur].id);
for(int i=;i <= n;++i)
if(dp[i] == dp[cur]- && isSat(cur,i))
printf(" %d",_date[i].id),cur=i;
printf("\n");
}
int main()
{
scanf("%d%d%d",&n,&w,&h);
for(int i=;i <= n;++i)
{
scanf("%d%d",&_date[i].w,&_date[i].h);
_date[i].id=i;
}
_date[]={w,h}; Solve(); return ;
}
Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present(LIS)的更多相关文章
- Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present 记忆化搜索
D. Mysterious Present 题目连接: http://www.codeforces.com/contest/4/problem/D Description Peter decided ...
- Codeforces Beta Round #80 (Div. 2 Only)【ABCD】
Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...
- Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...
- Codeforces Beta Round #79 (Div. 2 Only)
Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...
- Codeforces Beta Round #77 (Div. 2 Only)
Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...
- Codeforces Beta Round #76 (Div. 2 Only)
Codeforces Beta Round #76 (Div. 2 Only) http://codeforces.com/contest/94 A #include<bits/stdc++.h ...
- Codeforces Beta Round #75 (Div. 2 Only)
Codeforces Beta Round #75 (Div. 2 Only) http://codeforces.com/contest/92 A #include<iostream> ...
- Codeforces Beta Round #74 (Div. 2 Only)
Codeforces Beta Round #74 (Div. 2 Only) http://codeforces.com/contest/90 A #include<iostream> ...
- Codeforces Beta Round #73 (Div. 2 Only)
Codeforces Beta Round #73 (Div. 2 Only) http://codeforces.com/contest/88 A 模拟 #include<bits/stdc+ ...
随机推荐
- 【水滴石穿】bstmy-blend-app
这个项目是一个简单的底部导航切换页面 项目的地址为:https://github.com/Bstmy/bstmy-blend-app 先看效果 点击首页是首页面,点击个人中心是个人中心页面 先看代码 ...
- Pod在多可用区worker节点上的高可用部署
一. 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可 ...
- 阿里OSS-OSSFS
简介 OSSFS就以把OSS作为文件系统的一部分,能让你在linux系统中把OSS bucket挂载到本地文件系统中,实现数据的共享. 主要功能 ossfs 基于s3fs 构建,具有s3fs 的全部功 ...
- 两张图说明http协议,tcp协议,ip协议,dns服务之间的关系和区别
一.理解一个传输流再去扩展 用http举例来说,首先作为发送端的客户端在应用层(http协议)发出一个想看某个web页面的http请求. 接着,为了传输方便,在传输层(tcp协议)把从应用层处收到的数 ...
- 洛谷 1463[SDOI2005] 反素数ant
题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6 ...
- LeetCode107 Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...
- javascript中字符的一些常规操作
1,获取第一个字符 var str = "hello word"; console.log(str[0]); // h 2,获取最后一个字符 var str = "hel ...
- P4930「FJ2014集训」采药人的路径
题目:P4930「FJ2014集训」采药人的路径 思路: 这篇不算题解,是让自己复习的,什么都没说清楚. 很久没有写点分治了,以前为了赶课件学的太急,板子都没打对就照着题解写题,导致学得很不扎实. 这 ...
- ios程序员6级考试(答案和解释)
http://blog.sunnyxx.com/2014/03/06/ios_exam_0_key/ 我是前言 上次发了个ios程序员6级考试题 ,还在不断补充中,开个帖子配套写答案和解释. 1. 下 ...
- 2018年NOIP普及组复赛题解
题目涉及算法: 标题统计:字符串入门题: 龙虎斗:数学题: 摆渡车:动态规划: 对称二叉树:搜索. 标题统计 题目链接:https://www.luogu.org/problem/P5015 这道题目 ...