/*
这是杭电1677那道题
这算一道动态规划题,说起动态规划,不得不说背包九讲真是大牛呀,每次看都会有些收获
这道题难点之一是将其转化为,求最长单调非递增子序列
记得刚开始看到这道题的时候,没头没脑就开始了贪心,直接超时,稍微修改下
wrong Anser
不得不另辟蹊径
我想起以前看过的一道题,
说是河流两岸有许多村庄 ,南岸一些村庄与北岸(南北村庄个数相同
,且只有唯一朋友)的一些村庄是朋友,可以开通航线
但政府为了安全起见,不允许航线出现交叉
咱们假设南岸用Cn表示北岸用Dn表示
C1  C2   C3   C4………………

D1  D1   D3   D4………………
假设上述的都是Dn--》Cn为合法路线
Cn有序时,那么D1<D2<D3<D4<………………
假设上述不成立 即D2>D3
因为C2<C3
C2D2与C3D3一定会相交,那么与我们的假设相矛盾
所以D2<D3成立
那么这一题化为了就转化,将南岸的村庄排序后,求北岸村庄
最长单调递增子序列,nlogn能搞定
这一题与我们所说的这一题有许多些相似性
我们只需要将“长”按递增,“长”相等时,高递减
然后求,高的单调非递增子序列(也就是非严格单调递减子序列)
这个序列的长度就是所求的答案
可以这样想
L1    L2   L3   L4  L5   L6
H1    H2   H3   H4  H5   H6
当L单调递增时要它们能装在一起Hx<H(x+1)
那么当Hi>=H(i+1)它们一定不能装在一起
都现在我们只能说至少需要longth(序列长度)
到现在还不能武断说所求答案就是longth,
剩下的我还真没想到什么好的证明方法
我只能凭着感性思维,去判断
假设 这个序列为
m1   m2  m3  m4  m5  m6
m1前面的有比m1小,假如有比他大的,m1可以更新为比它大的值,
长度增加,与题意不符m1与m2之间的值也都比m2小,同理可推到mi
再者假设m1前有两个比m2大的(这两个数一定正序序),否则序列长度增加
那么装m1的时候一定,可以把大于m2的全部装完
同理,一直推到mi,
设子序列最后一个数为m,比m大的在m前面的都全部装完了,
m后面的数也可以按上面分析方法,解决掉
到这里就应该说第二个难点了,也不算什么难点,但就是再求
这个子序列时,我犯了大错,结果刷了屏都没写正确,最后我的脑子
就成了浆糊了,那叫个悲哀呀,
要处理这个子序列,就必须明确,这些L1>=L2
他们是可以相等的,想必第二个问题在一些人眼里不是问题

*/

#include<stdio.h>
#include<algorithm>
using namespace std;
#define N 30000
typedef struct
{__int64 w,h;
}Doll;
bool comp(Doll a,Doll b)
{if(a.w<b.w)return true;if(a.w==b.w&&a.h>b.h)return true;return false;
}
Doll doll[N];
__int64 num[N];
__int64 Midfind(__int64 x,__int64 low,__int64 high)
{if(x>num[0])return 0;while(low<=high){__int64 mid=(low+high)/2;if(num[mid]==x)return mid;else if(num[mid]>x){low=mid+1;}else high=mid-1;}return high+1;
}
__int64 Count(__int64 n)
{__int64 i,k,len;num[0]=doll[0].h;len=0;for(i=1;i<n;i++){if(doll[i].h<=num[len]){num[++len]=doll[i].h;}else{k=Midfind(doll[i].h,0,len);while(num[k]>=doll[i].h)k++;if(k>len)len=k;num[k]=doll[i].h;}}return len+1;
}
int main()
{// freopen("Input.txt","r",stdin);__int64 t,i,n;scanf("%I64d",&t);while(t--){__int64 w,h;scanf("%I64d",&n);for(i=0;i<n;i++){scanf("%I64d%I64d",&w,&h);doll[i].w=w;doll[i].h=h;//doll[i].w=w<h?w:h;//doll[i].h=w>h?w:h;}sort(doll,doll+n,comp);printf("%I64d\n",Count(n) );}}

/*在证明这个算法时,纰漏很多,等以后思路清晰了,大脑明白了,
再去不这些证明吧,当然更期待路过的大神给已指正,谢谢!!!^_^*/

HDU1677 Nested Dolls相关推荐

  1. hdu 1677 Nested Dolls 子串

    题目: A - Nested Dolls Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  2. HDU 1277 Nested Dolls

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1677 题意: 玩俄罗斯套娃,问最后至少还剩几个. 题解: 这题可以和拦截导弹做对比,因为这里是二维的 ...

  3. EOJ1765 Nested Dolls 最长上升子序列

    本题我试过很多方法,最开始的思路是,一个娃娃可以套另一个娃娃,这种偏序关系可以建图.找出图中最长的路径,然后把那些点删掉,再找出最长的路径,删掉,直至图中没有点,删除的次数就是答案,可是这样会超时.第 ...

  4. HDU OJ 1677 Nested Dolls【二分,LIS】

    原题连接:http://acm.hdu.edu.cn/showproblem.php?pid=1677 题意:每组测试数据给n个硬币,现在给你这n个硬币的长和高,若一硬币的长和高都小于另一个硬币,则这 ...

  5. Competitive Programming 3题解

    题目一览: Competitive Programming 3: The New Lower Bound of Programming Contests(1) Competitive Programm ...

  6. 杭电OJ分类题目(2)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(2) HDU Water~~~ HDU 100 ...

  7. python中def的用法 return_Python函数基础--def及return语句地操作

    1·def是可执行的代码 Python的函数是有一个新的语句编写的,即def.不像C这样的编译语言,def 实际上是一个可执行的语句--函数并不存在,直到Python运行了def后才存在.在典型的操作 ...

  8. nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping

    今天mybatis报了个错误 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type ...

  9. Hash join 和nested loop

    Hash join 和nested loop 总所周知,Oracle数据库常用的两种优化器:RBO(rule-based-optimizer)和CBO(cost-based-optimizer).目前 ...

最新文章

  1. Python3 PyQt5 PyCharm 环境搭建
  2. 矩阵相乘入门,两个矩阵相乘
  3. 学习 protobuf(一)—— ubuntu 下 protobuf 2.6.1 的安装
  4. 重新修复安装.netframework2.0
  5. 弹窗要打开或保存来自_如何让 PopClip 支持印象笔记客户端:保存到印象笔记amp;高亮文字...
  6. CSS3中的动画效果记录
  7. [源码]java.lang.reflect.Proxy
  8. 《jQuery、jQuery UI及jQuery Mobile技巧与示例》——9.7 技巧:指定过渡动画
  9. VISIO画图软件安装
  10. 华为NP课程笔记19-镜像技术
  11. dbfs和dbm的换算_「清晰易懂」dBFS、dBm、dBV、dBW、0dB、-3dB概念解析
  12. 计算机管理磁盘管理,windows7双磁盘管理图文教程
  13. windows怎样连接到linux桌面,Windows远程桌面连接Ubuntu 14.04
  14. wps 2003 给WPS设置保护眼睛的淡绿色呢?
  15. 学生成绩管理系统 002
  16. 我在阿里做数据分析师,一位阿里数据分析师的日常
  17. 2022:股票程序化交易实战2022Q3
  18. C 语言fseek, ftell调用失败(fseek返回非零值,ftell返回-1)
  19. matlab海面风场时间变化,台湾海峡海面风场的季节性变化特征分析
  20. 数据库的一些基础知识

热门文章

  1. ubuntukylin13.10装机体验
  2. 详细说明路由器WAN口和LAN口
  3. 马格南摄影师谈抓拍(ZT)
  4. Android应用程序窗口(Activity)的绘图表面(Surface)的创建过程分析
  5. 2021年特种作业证继电保护,2021电工作业考试题库
  6. 直播代码开发者发布的直播代码搭建教程
  7. 双非浙江工商大学,计算机考研从两门改考408!
  8. 无聊科技正经事周刊(第2期):线上马拉松你会参加吗?
  9. 2020CCF重点区域人群密度预测赛后总结---top3
  10. oracle更新所有数据,ORACLE数据库升级详细步骤