题面:现在有n(n<5000)个木头,每个木头都有长度l和重量w(l<10000,w<10000),现在你要对木头进行加工:

    1.第一根木头需要先花费1min;

    2.加工完第i跟木头后,假设w[i+1]<=w[i]并且l[i+1]<=l[i],那么不需要准备时间;

现输入多组数据,求最小时间代价

Input

  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

Output

  2

  1

  3

题意:求同时满足木棒的长和重量都构成不下降子序列的最少组数。

思路:显然是一个线性DP,和LIS很像,但有两个限制条件(长度和重量),我们可以先任选其中一个条件(假设长度)进行排序,此时其中长度条件已经满足,不需要再对其进行多余考虑,减轻负担,只需要对重量进行LIS即可。

代码:

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std; const int maxn=+; struct wood{
int l;
int w;
}line[maxn];//模拟二元组,方便排序
int f[maxn];//dp数组
int ans,n;
bool comp(wood a,wood b){
if(a.l==b.l)return a.w<b.w;
return a.l<b.l;
}
void Init(){
memset(f,,sizeof(f));//不要忘了加cstring头文件
memset(line,,sizeof(line));
ans=;//一定要初始化为1,因为开始木块需要准备
}
void DP(){
for(int i=;i<=n;i++){
f[i]=;
for(int j=;j<i;j++){
if(line[i].w<line[j].w && f[i]<f[j]+){
f[i]=f[j]+;
ans=max(ans,f[i]);
}
}
}
printf("%d\n",ans);
}
int main(){
int t;cin>>t;
for(int i=;i<=t;i++){
Init();//初始化
scanf("%d",&n);
for(int j=;j<=n;j++){
scanf("%d%d",&line[j].l,&line[j].w);
f[i]=;
}//填充二元组
sort(line+,line+n+,comp);//对长度排序
DP();
}
return ;
}

线性动归之Wooden Sticks的更多相关文章

  1. HDU-1051/POJ-1065 Wooden sticks 木棍子(动态规划 LIS 线型动归)

    嘤嘤嘤,实习半年多的小蒟蒻的第一篇博客(题解) 英文的: There is a pile of n wooden sticks. The length and weight of each stick ...

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

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

  3. POJ 1065 Wooden Sticks

    Wooden Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16262 Accepted: 6748 Descri ...

  4. HDU ACM 1051/ POJ 1065 Wooden Sticks

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

  5. 1051 Wooden Sticks

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

  6. Wooden Sticks

    Wooden Sticks Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

  7. C - Wooden Sticks

    C - Wooden Sticks Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  8. HDU 1051 Wooden Sticks (贪心)

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

  9. uvalive 2322 Wooden Sticks(贪心)

    题目连接:2322 Wooden Sticks 题目大意:给出要求切的n个小木棍 , 每个小木棍有长度和重量,因为当要切的长度和重量分别大于前面一个的长度和重量的时候可以不用调整大木棍直接切割, 否则 ...

随机推荐

  1. css背景图片加载失败,页面部分图标无法显示

    1.问题表现:首屏缺失部分图标.点击按钮切换为激活状态时,部分按钮的激活态图标无法显示. 2.问题原因:网络极差,断断续续,点击时添加class:active变为激活态, active.png这张图片 ...

  2. https绕过证书认证请求 Get或Post请求(证书过期,忽略证书)

    报错信息 解决: postman方式 java请求 报错信息 javax.net.ssl.SSLHandshakeException: sun.security.validator.Validator ...

  3. Firefox中input元素,不能重新获取焦点函数focus()

    js校验输入框的函数: function is_number(feild) { var strRegExp = /^\d+(\.\d{1,2})?$/; if (!strRegExp.test(fei ...

  4. 【分区】使用 GPT 分区表分区并格式化 (非 FreeBSD 系统)

    新购买的 Linux 云服务器,由于数据盘未做分区和格式化,无法使用. 注意: 数据盘中的数据在格式化后将全部被清空.请在格式化之前,确保数据盘中没有数据或已对重要数据进行备份.为避免服务发生异常,格 ...

  5. [CF163E]e-Government

    题目   点这里看题目. 分析   首先,我们不需要真的从 AC 自动机中把串删掉.由于我们计算贡献和,我们只需要在 AC 自动机上,把已经删除的串的贡献抹掉就可以了.   接着考虑询问.这是一个很基 ...

  6. python中的常用BIF

    BIF:就是python的内置函数,为了方便程序员的! 1.input()输入 在这里,只讲python3,因为python2到python3有不小的变化 通俗的解释就是你在控制台不管输入什么东西,都 ...

  7. (五)连接查询(SQL99标准)、子查询、分页查询、联合查询

    一.连接查询(SQL99标准) 1.含义:当要查询的数据来自多张表时要使用连接查询 2.语法: select 查询列表 from 表1 别名 [连接类型] join 表2 别名 on 连接条件 [wh ...

  8. Python中的队列

    参考资料: https://www.cnblogs.com/yhleng/p/9493457.html 问:我们为什么想使用队列? 答:为了方便,我就想喂给队列一堆object,就想让它们先进先出(F ...

  9. JVM面试题总结

    1.介绍下 Java 内存区域(运行时数据区) Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域. JDK 1.8之前主要分为:堆.方法区.虚拟机栈.本地方法栈 ...

  10. C++核心编程

    C++核心编程 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓. 1 内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统 ...