博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[POJ1065] Wooden Sticks
阅读量:5878 次
发布时间:2019-06-19

本文共 1037 字,大约阅读时间需要 3 分钟。

题意:

有N根木棍等待处理。机器在处理第一根木棍时需要准备1分钟,此后遇到长宽都不大于前一根木棍的木棍就不需要时间准备,反之则需要1分钟重新准备。

题解:

dp

题目要求的就是将木棍分成x组,每组木棍的\(l_i\)\(r_i\)都是不降的。

要求x最小,则x=将木棍按\(l_i\)从小到大排序后,\(w_i\)的最长下降子序列长度L。

根据鸽巢原理,若x<L,则分x组后,必有一组木棍的\(w_i\)是不降的,与条件不符,所以x==L成立。

#include
#include
#include
#include
#include
#include
#define ll long long#define N 5010using namespace std;int dp[N];pair
p[N];int gi() { int x=0,o=1; char ch=getchar(); while(ch!='-' && (ch<'0' || ch>'9')) ch=getchar(); if(ch=='-') o=-1,ch=getchar(); while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar(); return o*x;}int main() { int T=gi(),n,ans; while(T--) { n=gi(),ans=0; for(int i=1; i<=n; i++) { p[i].first=gi(),p[i].second=gi(); } sort(p+1,p+n+1); for(int i=1; i<=n; i++) dp[i]=1; for(int i=1; i<=n; i++) for(int j=1; j
p[i].second && dp[j]+1>dp[i]) { dp[i]=dp[j]+1; } } for(int i=1; i<=n; i++) { ans=max(ans,dp[i]); } printf("%d\n", ans); } return 0;}

转载于:https://www.cnblogs.com/HLXZZ/p/7675122.html

你可能感兴趣的文章
Python内置函数property()使用实例
查看>>
Spring MVC NoClassDefFoundError 问题的解决方法。
查看>>
CentOS 6.9配置网卡IP/网关/DNS命令详细介绍及一些常用网络配置命令(转)
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
C# 解决窗体闪烁
查看>>
CSS魔法堂:Transition就这么好玩
查看>>
【OpenStack】network相关知识学习
查看>>
centos 7下独立的python 2.7环境安装
查看>>
[日常] 算法-单链表的创建
查看>>
前端工程化系列[01]-Bower包管理工具的使用
查看>>
使用 maven 自动将源码打包并发布
查看>>
Spark:求出分组内的TopN
查看>>
Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
查看>>
关于跨DB增量(增、改)同步两张表的数据小技巧
查看>>
学员会诊之03:你那惨不忍睹的三层架构
查看>>
vue-04-组件
查看>>
Golang协程与通道整理
查看>>
解决win7远程桌面连接时发生身份验证错误的方法
查看>>
C/C++ 多线程机制
查看>>
js - object.assign 以及浅、深拷贝
查看>>