题意:

有 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的更多相关文章

  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 造木棍【贪心】

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

  7. HDU 1051 Wooden Sticks 贪心题解

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

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

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

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

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

随机推荐

  1. java.sql.SQLException: ORA-00911: invalid character 解决方法

    java.sql.SQLException: ORA-00911: invalid character 控制台抛出这个异常:java.sql.SQLException: ORA-00911: inva ...

  2. 当前界面最上面添加视图(UIWimdow)

    -(void)windowAddPushVc:(UIView *)pushView WithTitle:(NSString *)title { UIWindow *window = [UIApplic ...

  3. 经典的找不到符号(symbol)错误 #iOS开发

    使用BmobSDK的过程中,编译时出现了以下错误信息,意思是 -[BmobSRWebSocket _innerPumpScanner] 这个方法引用了 "_utf8_nextCharSafe ...

  4. mac--又发现了一款mac快捷键神器

    之前用applescript,还有keyboard maestro,前段时间用机械键盘的时候,用开源的karabiner重新设置机械键盘的键位. 今天因为网上抄的键位F4想换成Launchpad,所以 ...

  5. Spring HTTP下载

    (1)HTTP 协议可以在客户端和服务器之间传递任何类型的文件. HTTP协议下载文档到客户端时候, 必须通过响应头Content-Type设置文件类型. 例如: contentType=text/h ...

  6. linux之find命令详解

    linux之find命令详解 查找文件find ./ -type f查找目录find ./ -type d查找名字为test的文件或目录find ./ -name test查找名字符合正则表达式的文件 ...

  7. Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试

    本文是本人前一段时间做一个简单Java监控工具调研总结,主要包括VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,以及对Java微基准测试的简单介绍, ...

  8. 使用spring-data-redis做缓存

    说到缓存,首先肯定是spring-cache了. spring-cache使用一个CacheManager来进行管理缓存,为了使用我们的redis作为缓存源,需要向spring注册一个CacheMan ...

  9. 安装 CentOS 后的系统配置及软件安装备忘

    安装 CentOS 后的系统配置及软件安装备忘 // */ // ]]>   安装 CentOS 后的系统配置及软件安装备忘 Table of Contents 1 Linux 自举过程 1.1 ...

  10. XE3随笔19:实例 - 借用 Google 实现全文翻译

    调用 Google 翻译的地址格式: http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" + ...