HDU 1051 Wooden Sticks
题意:
有 n 根木棒,长度和质量都已经知道,需要一个机器一根一根地处理这些木棒。
该机器在加工过程中需要一定的准备时间,是用于清洗机器,调整工具和模板的。
机器需要的准备时间如下:
1.第一根需要1min的准备时间;
2.在加工了一根长为 l ,重为 w 的木棒后,接着加工一根长为 l’(l <= l’),重为 w’
(w <= w’)的木棒是不需要任何准备时间的,否则需要1min时间。
求加工 n 根木棒所用的最少时间。例如现有长和重分别为(4,9),(5,2),(2,1),(3,5)和(1,4)
的5根木棒,那么所需的最少时间为2min,顺序为(1,4),(3,5),(4,9),(2,1),(5,2);
分析:
属于资源调度问题,贪心算法能获得很好的效率。
但仅用贪心还是不够的,排序后还要用动态规划
方法一:
排序后求上升子序列的最少组数,这个组数即最少时间。
代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct mu
{
int L,W;
} m[];
bool cmp(mu a, mu b)
{
if(a.L == b.L) //优先按长度排序,相等时按重量
return a.W < b.W;
else
return a.L < b.L;
}
int main()
{
int t;
int b[]; //记录第 i 个木棒的分组序号
cin >>t;
while(t--)
{
memset(b, , sizeof(b));
int n;
cin >>n;
for(int i = ; i < n; i ++)
scanf("%d%d", &m[i].L, &m[i].W);
sort(m, m + n, cmp);
b[] = ; //第一个分为第一组
for(int i = ; i < n; i ++) //依次为后面的木棒分组
{
int k = ;
for(int j = ; j < i; j ++) //在当前木棒前面的木棒中找到比它沉且组数为最大的
if(m[i].W < m[j].W && k < b[j])
k = b[j];
b[i] = k + ; //当前木棒分为第 k + 1 组
}
int ma = ;
for(int i = ; i < n; i ++) //最大组数即最少时间
if(b[i] > ma)
ma = b[i];
cout <<ma <<endl;
}
return ;
}
方法二:
分组,只记录每组第一个,标记为0,其余的标记为1.
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cstring>
using namespace std;
struct mu
{
int l, w;
} m[];
bool cmp(mu a, mu b)
{
if(a.l == b.l)
return a.w < b.w;
else
return a.l < b.l;
}
int main()
{
int t, n;
int b[];
cin >>t;
while(t --)
{
memset(b, , sizeof(b));
scanf("%d", &n);
for(int i = ; i < n; i ++)
scanf("%d%d", &m[i].l, &m[i].w);
sort(m, m + n, cmp);
for(int i = ; i < n; i ++)
{
if(b[i] == )
continue; //已分组,看下一个
int k = m[i].w; //本组第一个
for(int j = i + ; j < n; j ++)
{
if(b[j] == )
continue;
if(m[j].w >= k) //后面升序的都归为本组
{
k = m[j].w;
b[j] = ;
}
}
}
int cnt = ;
for(int i = ; i < n; i ++)
if(b[i] == )
cnt ++;
printf("%d\n", cnt);
}
return ;
}
HDU 1051 Wooden Sticks的更多相关文章
- HDU 1051 Wooden Sticks (贪心)
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDU 1051 Wooden Sticks 贪心||DP
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- HDU - 1051 Wooden Sticks 贪心 动态规划
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 1051:Wooden Sticks(水题,贪心)
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- HDU 1051 Wooden Sticks【LIS】
题意:给出n个木头的重量wi,长度li,如果满足w[i+1]>=w[i]且l[i+1]>=l[i],则不用耗费另外的加工时间,问至少需要多长时间加工完这些木头. 第一次做这一题目也没有做出 ...
- HDU 1051 Wooden Sticks 造木棍【贪心】
题目链接>>> 转载于:https://www.cnblogs.com/Action-/archive/2012/07/03/2574800.html 题目大意: 给n根木棍的长度 ...
- HDU 1051 Wooden Sticks 贪心题解
本题一看就知道是最长不减序列了,一想就以为是使用dp攻克了. 只是那是个错误的思路. 我就动了半天没动出来.然后看了看别人是能够使用dp的,只是那个比較难证明其正确性,而其速度也不快.故此并非非常好的 ...
- hdu 1051 wooden sticks (贪心+巧妙转化)
#include <iostream>#include<stdio.h>#include<cmath>#include<algorithm>using ...
- HDOJ 1051. Wooden Sticks 贪心 结构体排序
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
随机推荐
- QuickHit快速击键小程序 --S2.4.5
我们现在要做一个项目 一个小小的程序 叫做快速击键 很明了的目的 就是在规定时间内,每次出现一组字母的组合,这个字母只能在DFJK中生成 然后输入相应的文字,按回车 自动判断输入的是否正确 在规定时间 ...
- Web项目中删错文件怎么办
在开发过程中,有时会因为手误将文件错误删除,会造成很大的困惑,今天看到一个网友分享的一种可以恢复文件的方式特别好用,现在分享给大家. 1.首先在删除文件的路径下创建与原来文件名字相同的文件. 2.在文 ...
- 微信web开发者工具初探
最近需要在微信企业号中挂接网页,之前也没有接触过微信开发,刚开始也不知道怎么调试,后来同事介绍使用“微信web开发者工具”,于是在网上下了一个,使用了一下的确很好用.它不仅支持Android和IOS同 ...
- gulp插件gulp-ruby-sass和livereload插件
gulp-ruby-sass是gulp的一个插件,主要是用来实现sass编译,livereload插件主要是实现文件保存时浏览器自动刷新,避免了手动f5的频繁的操作 准备工作:chrome浏览器安装l ...
- (转)Android消息处理机制(Handler、Looper、MessageQueue与Message)
转自 http://www.cnblogs.com/angeldevil/p/3340644.html Android消息处理机制(Handler.Looper.MessageQueue与Messag ...
- spring mvc(2):请求地址映射(@RequestMapping)
@RequestMapping 参数说明 value定义处理方法的请求的 URL 地址.method定义处理方法的 http method 类型,如 GET.POST 等.params定义请求的 UR ...
- Oracle 表空间联机(online)与脱机(offline)
数据库管理员可以在数据库处于开启(open)状态时令除 SYSTEM 表空间(tablespace)之外的任何表空间联机(online)(可访问)或脱机(offline)(不可访问).SYSTEM 表 ...
- 向modesim中添加alter库 (或者在每次仿真时将库文件加入仿真文件夹一起编译)
在ModelSim中进行仿真需要加入Quartus提供的仿真库,原因是下面三个方面: ·Quartus不支持Testbench: ·调用了megafunction或者lpm库之类的Alte ...
- 不一样的角度 解读微信小程序
不一样的角度 解读微信小程序 七月在夏天· 2 天前 前段时间看完了雨果奖中短篇获奖小说<北京折叠>.很有意思的是,张小龙最近也要把应用折叠到微信里,这些应用被他称为:小程序. 含着金钥匙 ...
- cassandra指定数据库路径
参考 https://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configCassandra_yaml_r.html 我们 ...