题目大意:有n根木棍(n<5000),每根木棍有一个长度l和重量w(l,w<10000),现在要对这些木头进行加工,加工有以下规则:

    1.你需要1分钟来准备第一根木头。

    2.如果下一根木头比第一根长且重,那么不需准备时间即可加工,否则需要1分钟时间准备。

木头没有顺序,求最小时间代价。(有多组数据)

输入:第一行t:需要处理的组数,接下来有t组数据,每组第一行是n,表示木头个数,下一行是n组,每组两个数,表示第i块木头的长、重。

  3
  5  
  4 9 5 2 2 1 3 5 1 4
  3
  2 2 1 1 2 2
  3
  1 3 2 2 3 1

输出:

  2
  1
  3(注意换行!!!!!!)

题目分析:一个典型LIS板子题,因为有两个限制条件,所以可以先排序其中一个条件,对另一个条件进行LIS求最少划分数。

      我们可以这么想:现在这些木头已经按长度从小到大排好序了,只要后面一根木头比前面轻,那么代价就+1,所以我们要求最少代价,就是最少划分数,                         划分的依据就是:后一个比前一个木头重,就可以合并,反之则划分数+1。

以下是代码:

 #include<cstdio>#include<cstring>#include<iostream>

#include<algorithm>
using namespace std;
const int maxn=1e5+10;
int n; struct ll{
int l,w;//定义结构体变量保存长度和重量,便于排序。
}lw[maxn]; int c[maxn];
int Max=1; //Max不要设为0,答案最小是1(根据第一条规则)
bool cmp(ll a,ll b){
if(a.l==b.l) return a.w>b.w;
return a.l<b.l;

}
void LIS(){//题目范围是5000,O(n^2)的效率足矣
for(int i=1;i<=n;i++){
c[i]=1;
for(int j=1;j<i;j++){
if(lw[i].w<lw[j].w&&c[i]<c[j]+1){//lw[i].w<lw[j].w是lw[i].w>=lw[j].w的反链
c[i]=c[j]+1;
Max=max(Max,c[i]);
}//最长反链等于最小正链划分数(证明自己百度)
//通过求出最长反链的长度即可求得最少代价
}
}
printf("%d\n",Max);
}
void clear(){
memset(c,1,sizeof(c));
for(int i=1;i<=n;i++){
lw[i].w=lw[i].l=0;
}
Max=1;
}//多组数据的初始化
int main(){
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++){
scanf("%d",&n);
for(int j=1;j<=n;j++){
scanf("%d%d",&lw[j].l,&lw[j].w);
}
//读入数据
sort(lw+1,lw+n+1,cmp);//对长度进行排序,对重量LIS
LIS();
clear();
}
return 0;
}

代码就是这样,其中LIS的思想还是很重要的。

HDU-1051 Wooden Sticks--线性动归(LIS)的更多相关文章

  1. HDU 1051 Wooden Sticks (贪心)

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  2. HDU 1051 Wooden Sticks 贪心||DP

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  3. HDU - 1051 Wooden Sticks 贪心 动态规划

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)    ...

  4. hdu 1051:Wooden Sticks(水题,贪心)

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. HDU 1051 Wooden Sticks【LIS】

    题意:给出n个木头的重量wi,长度li,如果满足w[i+1]>=w[i]且l[i+1]>=l[i],则不用耗费另外的加工时间,问至少需要多长时间加工完这些木头. 第一次做这一题目也没有做出 ...

  6. HDU 1051 Wooden Sticks 贪心题解

    本题一看就知道是最长不减序列了,一想就以为是使用dp攻克了. 只是那是个错误的思路. 我就动了半天没动出来.然后看了看别人是能够使用dp的,只是那个比較难证明其正确性,而其速度也不快.故此并非非常好的 ...

  7. HDU 1051 Wooden Sticks

    题意: 有 n 根木棒,长度和质量都已经知道,需要一个机器一根一根地处理这些木棒. 该机器在加工过程中需要一定的准备时间,是用于清洗机器,调整工具和模板的. 机器需要的准备时间如下: 1.第一根需要1 ...

  8. HDU 1051 Wooden Sticks 造木棍【贪心】

    题目链接>>> 转载于:https://www.cnblogs.com/Action-/archive/2012/07/03/2574800.html  题目大意: 给n根木棍的长度 ...

  9. hdu 1051 wooden sticks (贪心+巧妙转化)

    #include <iostream>#include<stdio.h>#include<cmath>#include<algorithm>using ...

  10. HDOJ 1051. Wooden Sticks 贪心 结构体排序

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

随机推荐

  1. jenkins打包java maven项目

    一.maven本地配置 1.修改apache-maven-3.6.1\conf\settings.xml文件,把仓库配置成本地仓库 <localRepository>D:\apache-m ...

  2. Shader 001 - 函数造型能力

    0x00 从函数出发 Shader 中的很多效果都是由函数计算得出的,如何更好地理解二者的关系呢.不妨先看看函数是什么?函数的定义可以简单地描述为:给定一个集合 A,对于其中的元素施加法则 f,则可以 ...

  3. oracle之三目录库和辅助库

    目录库和辅助库 10.1 创建目录库(Catalog database)的必要性 如果没有catalog,RMAN的存储库(元数据)保存在目标库的控制文件里,这样可能存在如下隐患 1)目标库上的控制文 ...

  4. 如何使用dockerfile将jar包生成镜像

    1.编写dockersfile FROM java:8 ADD SPRINGCLOUD.jar app.jar RUN bash -c ‘touch /app.jar’ ENTRYPOINT [&qu ...

  5. mysql数据库常见问题修改(待补充)

    1.修改mysql最大连接数的方法:临时修改:1.使用命令show variables 来查看当前最大连接数 show variables like '%max_connections%'; 使用命令 ...

  6. 按正常步骤对github的仓库进行push自己本地的代码提示push rejected

    按正常步骤对github的仓库进行push自己本地的代码提示push rejected. 大概原因是:初始化项目时,远程仓库我建了README.md文件,而本地仓库与远程仓库尚未进行文件关联,因此需要 ...

  7. [LeetCode]364. 加权嵌套序列和 II (DFS)

    题目 给一个嵌套整数序列,请你返回每个数字在序列中的加权和,它们的权重由它们的深度决定. 序列中的每一个元素要么是一个整数,要么是一个序列(这个序列中的每个元素也同样是整数或序列). 与 前一个问题 ...

  8. linux定时删除过期文件

    需求说明 每日凌晨0点定时删除/temp目录下的所有一个月未被访问的文件. 脚本实现 linux 终端输入crontab -e,添加定时任务脚本命令 [root@localhost ~]# cront ...

  9. matplotlib | Python强大的作图工具,让你从此驾驭图表(二)

    今天是数据处理专题的第10篇文章,我们继续来聊聊matplot这个工具库. 在上周的文章当中我们介绍了matplot的基本用法,以及展示了一些简单的例子,让大家直观地了解这个工具包.我们可以简单地将它 ...

  10. JS进阶 | 解决JQ keyup事件延迟的问题

    写在前面 在使用keyup事件时,存在一个问题,假如想要做出类似于表单验证的demo:表单输入账号 “xxx” 后  再去ajax异步去后台数据库匹配,但是keyup事件的原理是每次键盘事件弹起就会检 ...