http://acm.nyist.net/JudgeOnline/problem.php?pid=236

这道题,华丽丽的坑了我六个小时的时间。

参考了一下其他的blog,发现原来用的diworth定理。

先将一边排好序,然后,对另一个参数构成的序列,求最长单调递减子序列即可以。

一开始我用的dp双重循环,虽然感觉时间有点危险,但是图省事,提交上去。瞬间tle了。只好改写为栈优化的最长单调递减子序列。

首先卡壳在了二分查找哪里,看到一篇文章说90%的人都写不对二分查找,然后写啊写啊,一直提交一直错,以为自己的二分查找写错了。

但是我改啊改啊,怎么就是找不到错,感觉不对劲然后找了另外一道题,http://acm.nyist.net/JudgeOnline/problem.php?pid=17,试了一下,发现自己的二分查找没有写错,那么应该是我的逻辑有错误了,发现自己对diworth定理理解的不是很深刻,然后回头想了一下,也没发现问题,然后又找了道题一导弹防御的问题一试果然有问题。然后开始琢磨怎么回事,最后突然想是不是栈优化的地方出了问题,发现果然是哪里出现了问题。最后总结了一下栈应该怎么用。

如果是严格单调下降的子序列。在栈中应该替换最先小于等于此值的位置的值。而如果求的不是严格单调下降的子序列。在栈中应该替换最先小于此值的位置的值。
反之,求上升的子序列时也是这样。也是可以这样理解,严格的升序或降序则不能有重复的值在栈中,不严格的升序或降序则可以有重复的值。

修改完栈的错误后,直接把导弹防御的问题给AC了,但是这道题还是有错误,这时候我的个心真是哇凉哇凉的了,然后看讨论区吧,突然发现一句话,说此题要好好看题,瞬间我想是不是我没理解好题意,或者是有哪里漏想了,发现有一句话有意思了,是每一个参数都要小于等于另外一个参数,然后我想是不是少考虑了,有一个参数相等的情况。因为相等的情况下,这时这些木棍只需要一个时间就可以了,发现cmp哪里果然有问题。改完后,瞬间过了。哈哈。。

总之很开心啊,哈哈,明天考电磁场了,今天真给鼓劲啊,哈哈。。。

cmp原先是:

int cmp(M a,M b)
{return a.weight<b.weight;
}

AC代码。

#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
typedef struct{int weight;int len;
}M;int  q(int *num,int B,int E,int elem)
{if(B>=E) return E;int mid = (B+E)/2;if(num[mid]>elem) return q(num,mid+1,E,elem);else return q(num,B,mid,elem);
}int cmp(M a,M b)
{if(a.weight==b.weight) return a.len<b.len;else return a.weight<b.weight;
}int main()
{int t,num[5005];int tm,top = 0;M input[5005];scanf("%d",&t);while(t--){scanf("%d",&tm);for(int i = 0;i<tm;++i)scanf("%d%d",&input[i].len,&input[i].weight);sort(input,input+tm,cmp);top = 0;num[0] = input[0].len;++top;for(int i = 1; i < tm;++i){if(input[i].len<num[top-1]){num[top++]=input[i].len;}else{num[q(num,0,top-1,input[i].len)]=input[i].len;}}printf("%d\n",top);}return 0;
}

NYOJ_236_心急的C小加相关推荐

  1. NYOJ 236 心急的C小加

    心急的C小加 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间 ...

  2. NYOJ - 心急的C小加

    心急的C小加 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位 ...

  3. nyoj 236 心急的C小加(偏序集问题)

    描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需 ...

  4. 心急的C小加《贪心》

    题目http://115.159.40.116/contest_show.php?cid=66#problem/B 其实这个题就是求有多少个子序列: #include<stdio.h> # ...

  5. 贪心算法之贪心的c小加问题

    NYOJ-236 心急的C小加 心急的C小加 时间限制: 1000 ms  |           内存限制: 65535 KB 难度: 4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一 ...

  6. NYOJ 409 郁闷的C小加(三)

    郁闷的C小加(三) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考"郁闷的C小加(一)&quo ...

  7. NYOJ 267 郁闷的C小加(二)

    郁闷的C小加(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考"郁闷的C小加(一)&quo ...

  8. NYOJ 257 郁闷的C小加(一)

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说)操 ...

  9. 戴志坚接替李小加出任职港交所行政总裁 基本年薪700万港元

    1月4日消息,昨日晚间港交所发布公告称,委任原香港交易所联席总裁及首席营运总监戴志坚接替李小加职务,于2021年1月1日起出任香港交易所代理集团行政总裁. 根据委任函,戴志坚的报酬待遇包括基本年薪7. ...

最新文章

  1. Nodejs进阶:express+session实现简易身份认证
  2. 2012 MUTC 7 总结
  3. java无参试题_JavaEE基础面试题0
  4. Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载
  5. 单刹车信号不合理故障_关于汽车制动系统有哪些故障?该如何解决?
  6. mysql for update场景_一个mysql死锁场景实例分析
  7. Redis 与 hash (哈希)相关的常用命令
  8. 轮播图高度自适应_干货!弘成教你写轮播图全自动适应封装代码
  9. 一文看懂语音识别 - ASR(基本原理 + 4个实现流程)
  10. js和php难度,有js基础和简单的php基础,但是学习nodejs还是很吃力
  11. jquery学习之事件委派
  12. Pidgin 新QQ插件:pidgin-lwqq
  13. 下载SAP hana镜像文件
  14. 简述多媒体计算机的特点,多媒体技术的主要特点
  15. 每次打开office2016相应应用都要配置进度的解决方法
  16. 世嘉MD游戏开发进阶篇【一】:两点之间的距离
  17. 用overleaf 写 计算机学报 格式的论文
  18. 想不到 HR 都在 GitHub 捞人!五位开源大牛分享成长经历(文末福利)
  19. 代码质量好坏如何评判
  20. [杀鸡用鸡刀]扯谈“快准狠”的去服务化商业模式

热门文章

  1. 《营在微博:企业微博营销实战宝典(全彩精印)》图书信息
  2. 《linux系统运维》学习笔记
  3. vue 实现日期年月日下拉选择
  4. SQL SERVER 查询Job作业基本信息及执行情况
  5. android和MTKP60哪个好,联发科P60和骁龙636哪个好?骁龙636与联发科P60区别对比详细评测...
  6. OpenNI2 内存管理
  7. RAC:Oracle 19C 数据库一键安装
  8. Access、SQLServer以及SQLite的日期时间差计算
  9. 外媒评黑莓推 Android 手机:自取其辱
  10. foward redirect