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+ ...
随机推荐
- 【转】基于OLSR路由协议实现Ad-Hoc组网
一.软件包的安装 1. olsrd软件包的安装 libpthread_0.9.33.2-1_ar71xx.ipk olsrd_0.6.6.2-4_ar71xx.ipk 2. luci的安装 olsrd ...
- oracle水线的定义
1.水线定义了表的数据在一个BLOCK中所达到的最高的位置. 2.当有新的记录插入,水线增高 3.当删除记录时,水线不回落 4.减少查询量
- DCOJ5117 set
题目描述 给定一个数集 A,要求构造一个数集 B,满足: • 对于 A 集合中任意的数 x,x 属于 B,即 A ⊆ B: • 对于 B 集合中任意的数 a, b,(a + b) mod p 属于 B ...
- 在linux里如何建立一个快捷方式,连接到另一个目录
用软链接 用法:ln -s 源目录 目标快捷方式, 比如你要在/etc下面建立一个叫LXBC553的快捷方式,指向/home/LXBC,那就是 ln -s /home/LXBC /etc/LXBC ...
- poj2112 最大流
我用Dinic写的.G++ 1800ms 很慢,c++直接超时.优化后的 141ms,很快! 对于此题,建图方法很巧妙,通常想到求距离,那就会朝距离的方向建图,但是这题根据牛个数来建图,然后二分距离. ...
- Hibernate 标签: hibernate数据库 2017-01-15 22:03 462人阅读 评论(24)
什么是hibernate? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernat ...
- ArcGIS 发布高程服务。10.4
ArcGIS 发布高程必须是10.21以上,我用10.4. 前端用ArcGIS For API 4.x. ARCGIS很早之前有CS版本的ArcScene,可查看高程TIF文件,但机制和BS的完全不同 ...
- Flask_Migrate数据库迁移
migrate数据库迁移 有models,没有迁移仓库.本地新建数据库:首次创建迁移仓库.迁移脚本:执行迁移脚本生成数据库表: python manage.py db init python mana ...
- 注意特殊情况!最长上升子序列!!poj2533
poj 2533 简单的动归.用O(n^2)的算法也能过.但是有个细节!刚开始ans初始化为0时是错的!!!要初始化为1.因为只有1个数的时候,下面的循环是不会执行的.....或者特判.. #incl ...
- Flask学习之十二 使用boostrap
英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xii-facelift 中文翻译地址:http://w ...