P1233 木棍加工

简介: P1233 木棍加工

P1233 木棍加工

本题链接:P1233 木棍加工

本博客给出本题截图

image.png

AC代码

代码解释:按照长度从大到小排列,如果长度相同,则按照宽度从大到小进行排列,如此操作后,这个问题就变成了在n个数中,求不下降子序列最少个数,根据 dilworth定理:不下降子序列最小个数等于最大上升子序列的长度,故这个题就转换成了求n个数的最大上升子序列,f[i] 表示长度为 i 的(木棒宽度的)上升子序列结尾最小是多少,显然f是单调上升的,如果f数组的结尾元素小于a[i].w,那么就把a[i].w加入到f数组的结尾,反之利用二分法去找到当前比木棒宽度大的第一个位置并更新


代码*:

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 5010;
struct dp
{
  int l, w;
}a[N];
int f[N];
int n, m;
bool cmp(dp b, dp c)
{
  if (b.l != c.l) return b.l > c.l;
  return b.w > c.w;
}
int main()
{
  cin >> n;
  for (int i = 1; i <= n; i ++ )
    cin >> a[i].l >> a[i].w;
  sort(a + 1, a + n + 1, cmp);
  int cnt = 0;
  for (int i = 1; i <= n; i ++ )
  {
    if (a[i].w > f[cnt])
      f[++ cnt] = a[i].w;
    else
    {
      int t = lower_bound(f + 1, f + 1 + cnt, a[i].w) - f;
      f[t] = a[i].w;
    }
  }
  cout << cnt << endl;
  return 0;
}

总结

dilworth定理不下降子序列最小个数等于最大上升子序列的长度





目录
相关文章
|
6月前
|
存储 SQL 缓存
实时数仓宽表加工解决方案
实时数仓宽表加工解决方案
172 0
实时数仓宽表加工解决方案
|
数据管理 BI 定位技术
什么是数据地图、血缘分析和数据资产?
什么是数据地图、血缘分析和数据资产?
|
存储 JavaScript
八字油槽的加工
八字油槽的加工
八字油槽的加工
|
存储 分布式计算 DataWorks
如何正确的做增量加工
回到十多年前,增量加工这个方法并不是一种需要特别需要提出的方法,因为关系数据库的存储与计算性能十分有限(即便是MPP数据库平台也不是全都是做全量加工),增量加工是最普遍的方式。本文讲述了如何在MaxCompute上用与关系数据库的不同的方式做增量数据的加工。
1226 3
如何正确的做增量加工
|
运维 监控 Kubernetes
SLS数据加工2021年技术总结
过去一年,SLS团队持续对数据加工服务进行了各方面迭代升级,本文总结了相关功能与技术上的进展。
976 0
|
存储 JSON 运维
多模式日志数据流的实时加工与集散
日志处理是一个极其繁琐的过程,究其原因是日志的边界情况特别多,而且可能随时在变。阿里云 SLS 数据加工服务是专门针对日志规整、富化、集散等处理场景。本文主要介绍在多模式混杂的日志集散场景下,如何快速使用 SLS 数据加工服务完成需求。
374 0
多模式日志数据流的实时加工与集散