博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1233 木棍加工
阅读量:6705 次
发布时间:2019-06-25

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

dirworth定理+双关键字最大上升子序列

显然可以看出是求最小的双关键字不上升子序列的覆盖数。

根据dirworth定理就可以换去求最长的上升子序列。

双关键字的最长上升子序列求法:

先将一个关键字上升地排序,另一个关键字下降,按照原来的那样n^2的做即可。

其实蒟蒻不明白其中的原理,如果有大佬知道的话麻烦告诉一声

代码:

#include
#include
const int maxn = 5005;struct Nodes{ int l, w; bool operator < (const Nodes &rhs) const { return l < rhs.l; }} s[maxn];int n;int dp[maxn];// 定义最长上升子序列 int main(){ scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%d%d", &s[i].l, &s[i].w); } std::sort(s + 1, s + n + 1); for(int i = 1; i <= n; i++) { dp[i] = 1; for(int j = 1; j < i; j++) { if(s[i].w < s[j].w && s[i].l > s[j].l) { dp[i] = std::max(dp[i], dp[j] + 1); } } } int ans = -1; for(int i = 1; i <= n; i++) ans = std::max(ans, dp[i]); printf("%d\n", ans); return 0;}

转载于:https://www.cnblogs.com/Garen-Wang/p/9873564.html

你可能感兴趣的文章
微软ML.NET 0.10版分离处理表格数据增.NET生态系互操作性
查看>>
JDK, JRE和JVM的区别与联系
查看>>
Android视频编辑SDK--RDVECore来自锐动的无UI,高度抽象化API
查看>>
currentTarget VS target
查看>>
你所不知道的HTML5——语音合成
查看>>
Prettier your project
查看>>
RecyclerView顶部添加padding的方法
查看>>
web前端性能优化
查看>>
面试官“你的期望薪资是多少?”聪明的程序员都是这样答的!
查看>>
阿里巴巴资深技术专家无相:我们能从 InteliJ IDEA 中学到什么?
查看>>
Http请求首部Accept-Language
查看>>
手拉手教你实现一门编程语言 Enkel, 系列 14
查看>>
css实现图片背景填充的正六边形
查看>>
Android反编译及破解API协议 记录1
查看>>
LocalBroadcastManager源码剖析
查看>>
springmvc + mybatis + ehcache + redis 分布式 架构
查看>>
如何打通CMDB,实现就近访问
查看>>
网络字体(Web font)文件格式及兼容性说明
查看>>
Unity3D——Transform的Position和LocalPosition
查看>>
回流 与 重绘
查看>>