poj1065 Wooden Sticks(没有交集元素的lis的条数)

POJ1065 POJ1065–贪心问题 目录POJ1065--贪心问题一、题目链接二、题目内容三、题意拆解四、解题思路五、参考代码 一、题目链接 题目来源–POJ1065 二、题目内容 There is a pile of n wooden sticks. The length and weight of each stick are known in advance. The sticks are to be processed by a woodworking machine in one by one fashi 阅读详情

题意:给你n个棍子,棍子有两个属性l和w,开启机器加工这些棍子,如果满足l1<=l2且w1<=w2,加工完棍子1之后便可以加工棍子2,否则要再次启动机器,问最少要启动几次?
题意等价于:给出若干个偏序,求出这样一个集合的大小,该集合中任意两个偏序都不可比较。

分析:如果将棍子按照其中一个属性升序(属性值相同就按另一属性值升序),那么就是求另一个属性的lis链最少条数,要求各条lis链之间不包含相同下标的元素。

进一步分析可得到一个结论: 求最少的最长不降子序列链条数可以转换成,求最长下降子序列长度,因为下降的元素一定不能放在相同的链中,只能放在不同的链中,那么最少的链数便是最长下降子序列的长度。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=5000;
const int inf=0x3f3f3f3f;

pair<int,int>s[maxn+5];

int n;
int a[maxn+5];
int g[maxn+5];

int lis(){//最长上升子序列模板
    int ans=0;
    memset(g,inf,sizeof(g));
    for(int i=1;i<=n;i++){
        int k=lower_bound(g+1,g+1+n,a[i])-g;
        g[k]=a[i];
        ans=max(ans,k);
    }
    return ans;//返回最长长度
}

int main(){
    ios::sync_with_stdio(false);
    int T;
    cin>>T;
    while(T--){
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>s[i].first>>s[i].second;
        }
        sort(s+1,s+1+n);//按l升序,l相同按w升序
        for(int i=1;i<=n;i++)a[i]=s[i].second;
        reverse(a+1,a+1+n);//原意是求出最长下降子序列,反序之后便是求最长上升子序列,方便套模板
        cout<<lis()<<endl;
    }
}

算法分析解题报告poj1065 用贪心算法解决POJ 1065的木棍处理问题 立即下载

相关推荐

银河麒麟V10+QT6.0中文输入法环境搭建全攻略(附镜像加速技巧)

本文提供了在银河麒麟V10操作系统上为QT6.0搭建中文输入法环境的完整实战指南。文章详细介绍了从系统准备、镜像源优化、QT6安装器获取与加速安装,到编译Fcitx5输入法插件依赖库、深度配置环境变量与项目的全流程。重点分享了使用国内镜像源加速安装的技巧,解决了国产化开发中QT应用无法输入中文的常见难题,旨在帮助开发者快速构建稳定高效的开发环境。

weixin_29204749的博客 392

POJ 1065 (贪心法)

/* 思路:首先对木棒排序,按length升序排序,length相同,则按weight升序排序 然后在weight中通过贪心法找有多少个递增序列 */ #include #include using namespace std; const int MAX_NUM = 5002; struct stick{ int len, wgt; }stk[MAX_NUM]; bool vis[MAX

JoyForce的专栏 708

ESXI 8.0.3 ubuntu 24.04 直通显卡P40

手把手,一步步教你直通GPU,ESXI 8.0.3 ubuntu 24.04 直通显卡P40

qq_36433118的博客 4682

POJ 1065 Wooden Sticks / hdu 1257 最少拦截系统 DP 贪心

参考链接:http://blog.youkuaiyun.com/xiaohuan1991/article/details/6956629 (HDU 1257 解题思路一样就不继续讲解) POJ 1065题意:给你n个木块,分别给出其长度和重量,然后要对这些木块进行加工,如果木块1的长度和重量都不大于木块2,         那么这两个木块可以放在一起加工,从而只用花费1个时间单位。问要如何进行加工从而能...

weixin_34310785的博客 181

新手避坑:RT-Thread-Studio外设驱动配置最容易忽略的3个地方(附WDT实例)

本文针对RT-Thread-Studio新手在配置外设驱动时常见的编译报错问题,以看门狗(WDT)为例,详细解析了最易忽略的三个关键配置环节:RT-Thread-Studio的图形化Setting开关、Kconfig中的依赖关系以及SConscript的编译规则。掌握这三层配置模型,能有效避免头文件包含正确却依然编译失败的问题,确保驱动代码被正确加入构建。

gray5的博客 506

《QMT量化实战系列》支持自定义筛选与排序的多因子策略,实测年化收益超100% (1)

公众号推出《QMT量化实战》系列,通过多维度、多策略、多场景讲解QMT量化平台应用,每期附代码解读。本期复现《支持自定义筛选与排序的多因子策略》,策略包含三大核心模块:1. 通过Tushare获取30+财务因子数据;2. 提供灵活筛选机制(支持排除ST股、次新股及特定板块);3. 创新性多因子加权排序系统(支持自定义因子权重组合)。交易逻辑包含动态调仓机制,当持仓标的排名低于阈值时触发卖出。该策略具有高度可配置性,适合不同风险偏好的投资者。(149字)

qq_46262068的博客 1730

贪心问题(POJ1700/1017/1065)(C++)

本文主要就贪心问题给出了讲解和例题的讲述,使用C++语言,基于贪心问题(POJ1700/1017/1065)

CUGLin的博客 1285

C++五子棋人机对战

使用C++,开发五子棋人机对战,快速提升C++项目开发能力。

程序员Rock的博客 5万+

poj 1065 Wooden Sticks(diworth定理)

题意:有n条木棒,给出它们每条的l和w,用一台机器对它们进行加工,如果机器正加工的木条,与在它之前加工的木块有关系:l <= l'和w <= w',则机器不用准备时间,否则需准备1分钟。问加工完全部木棒,机器最少需要准备多久。 思路:每次以某一点为起点,向后贪心地走。(虽然是求小链覆盖,但是不用上网络流) 或者利用diworth定理,最长反链 = 最小链覆盖(本...

ehdhg13455的博客 346

电磁波成像技术全解析:从γ射线到无线电波的应用实践

本文全面解析电磁波成像技术,从γ射线到无线电波的应用实践。详细介绍了不同波长电磁波的特性与实用场景,包括医疗影像、工业检测、安防监控等领域。特别探讨了X射线、红外热成像、毫米波雷达等前沿技术的实战应用,为读者提供技术选型指南和操作技巧。

weixin_29305337的博客 293

YOLOv8/v9实战:从零搭建智慧零售货架管理系统(附完整可运行代码)

摘要:本文基于YOLOv8/v9目标检测算法,详细讲解智慧零售货架管理系统的开发流程,解决传统人工巡检效率低、漏检率高的问题。内容涵盖环境配置、商品检测、陈列分析、价格标签验证等核心功能实现,提供可运行代码及零售专用数据集训练方法。系统支持实时货架状态监控、缺货预警与数据分析,帮助零售企业降低运营成本30%以上。 关键词:YOLOv8、YOLOv9、智慧零售、货架管理、商品检测 标签:YOLOv8、YOLOv9、目标检测、零售AI、Python

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1309

POJ 1065 Wooden Sticks 【贪心】

题目链接 题意 给n个整数对,定义数对间的大于关系是(w1,l1)≤(w2,l2)↔w1≤w2andl1≤l2,求用这些数对最少能组成几组非递减序列 分析 LIS的变形,但考虑到原来给的这些数对并没有顺序,可以随便选择,因此没有必要用DP求LIS。可以倒序排序(先按第一个数排序,再按第二个数排序)后,贪心,即从左到右遍历,选择当前还没有被选择的数对中的最小...

babao9492的博客 126

全面解析智能座舱芯片参数:高通 (SA8295)vs 联发科,真实案例一行行讲给你听!

使用场景推荐芯片中低端车型 + 1屏导航语音SA8155P / MT8628(性价比高)中控+副驾+仪表+全景影像SA8255P / MT8678(性能强)高阶自动驾驶+域控融合SA8295P(顶级安全+算力)

weixin_43199439的博客 2075

POJ 1065 Wooden Sticks 解题报告-用动态规划方法解决(LIS变式)

POJ 1065 Wooden Sticks 解题报告-用动态规划方法解决(LIS变式)DescriptionThere is a pile of n wooden sticks. The length and weight of each stick are known in advance. The sticks are to be processed by a woodworking mach

Jeza SS 748

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

POJ_1065_Wooden_Sticks_(动态规划,LIS+鸽笼原理)

描述 http://poj.org/problem?id=1065 木棍有重量 w 和长度 l 两种属性,要使 l 和 w 同时单调不降,否则切割机器就要停一次,问最少停多少次(开始时停一次). Wooden Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissions...

aquz77529的博客 169

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

poj 1065 Wooden Sticks dp LIS

《挑战》练习题,LIS基础题。

ned_chu的博客 432

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

DP:Wooden Sticks(POJ 1065)

                                    摆木棍   题目大意:即使有一堆木棍,给一个特殊机器加工,木棍都有两个属性,一个是l一个是w,当机器启动的时候(加工第一根木棒的时候),需要一分钟,在这以后,设机器加工的上一根木棒的长度是l,质量是w,下一次加工的木棒长度为l`,质量为w`,当且仅当l`>=l且w`>=w时,机器不需要额外的时间,否则...

bandilan2400的博客 244

POJ 1065 Wooden Sticks

题目传送门 解题思路: 将w从小到大排序,当w相等时,l较小的在前面,以l为基准求LIS. AC代码: 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 6 using namespace...

anshuo0835的博客 107

Poj 1065 wooden sticks

题意大概是,有很多木块,需要进行加工,如果木块的长度和重量都大于等于之前加工的,就不需要等待,否则需要等待一分钟,问加工这些木块最少需要多少时间。 这个问题如果按照长度l排序,然后根据重量w排序,之后就只需要求排好序的数列里面,单调不递减子序列的最少数量N。 方法一:直觉贪心 这个题目有两个AC的方法。先说一个能AC,但是不能证明正确的,就是贪心算法,从头到尾遍历数组,每次都拿第一个比当前最...

zerooffdate的专栏 359

poj1065 Wooden Sticks[LIS or 贪心]

地址戳这。N根木棍待处理,每根有个长x宽y,处理第一根花费1代价,之后当处理到的后一根比前一根长或者宽要大时都要重新花费1代价,否则不花费。求最小花费代价。多组数据,N<=5000 本来是奔着贪心来做的。首先按照套路想到排序,长优先宽再次从小到大。由于要不浪费,尽量按照顺序去找,第一次把花费仅为1的最长子序列抽出来,标记之后,再循环找下一个未被标记的最长子序列保证只花费1,这...

dianer2977的博客 167

POJ - 1065 Wooden Sticks DP(LIS)|| 贪心

传送门:POJ 1065 题意:要处理n个长为li,宽为wi的木棍,若处理完(li, wi)后接着处理(li', wi')且满足li' >= li, wi' >= wi 则不花费时间,否则花费1单位时间,问处理完n根木棍最少花费多长时间。 思路:一开始想着贪心来着,谁让这是dp系列的题呢,就没敢写,没想到贪心还真能解。。 解法一:利用Dilworth定理将本题转化为LIS问题,有关Dilwo

WA是一笔财富 404

poj 1065 Wooden Sticks贪心水过

点击打开链接 #include #include #include using namespace std; const int M =5100; struct Node{ int L; int W; bool operator <(const Node t)const { if(L==t.L) return W>t.W; return L>t.L; }

Masamiiiiii 418

Wooden Sticks POJ 1065(简单dp)

原题 题目链接 题目分析 题意很明确,就是要维护单调递增的序列,最后看有多少种单调序列即可,设定一个dp数组,cnt表示数组大小,初始化为0,然后把所有木头从小到大排个序,当遍历到木头i时,如果dp数组里有比木头i还小的,就代替它,否则就dp[cnt++]=木头i,最后cnt就是答案. 代码 1 #include <iostream> 2 #include...

dashengchong6303的博客 228

Wooden Sticks POJ 1065 (LDS)

这个题是一开始学贪心的时候刷的,思路是先排个序,按照l,然后找w有多少个上升序列#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; const int maxn = 5005; struct node { int

bllsll 281

pku1065 Wooden Sticks

http://poj.org/problem?id=1065 DP,最长“上升”子序列 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct Sticks 5 { 6 int x, y; 7 }s[5432]; 8 9 int n, dp[5432]; 10 1...

weixin_30488313的博客 107
上一篇: 二分图判定
下一篇: %f和%lf
FightingForFinal
博客等级 码龄11年 24粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值