ACM 木材加工问题
Problem Description
工厂准备使用机器加工一批木材 。 每根木材有两个参数 l 和 w , 即木材的长度和木材的重量 。 由于只有一台机器 , 所以木材只能一次加工一根 。在加工每根机器前,需要设置一下机器,这需要花费一定的时间,我们称为设置时间。设置时间可以按如下方法计算:
( 1 )机器加工第一根木材时,需要 1分钟的设置时间;
( 2 )加工完一根木材 ( 参数为 l 和 w ) 后 , 如果下一根要加工的木材的参数 l ’与 w ’满足 l<=l ’ 与 w<=w ’,则不需要重新设置即可加工,即设置时间为 0 ;否则需要 1 分钟的设置时间。
Input
第一行包含 1个整数N(1<=N<=5000),表示要加工木材的数量。接下来有 2* N个整数l1 w1 l2 w2 …… ,表示每根木材的长度与重量。
例如:如果有一批木材有 5 根 ,每根的长度和重量分别为 :( 9 ,4 )、( 2 , 5 )、( 1 , 2 )、( 5 , 3 )、( 4 , 1 ), 按 (1 , 2) 、 (2 , 5) 、 (4 , 1) 、 (5 , 3) 、 (9 , 4) 的顺序加工可以达到最少的设置时间 2 分钟
Output
输出一个整数,表示加工完这批木材,至少需要多少分钟的加工时间。
Sample Input
5
9 4
2 5
1 2
5 3
4 1
Sample Output
2
思考:此题在于求最少加工时间,加工时间 = 机器设置时间+机器工作时间。但对于这个题目来说,机器的加工时间是很短的,不考虑的,因此这个题目也就是变成了求最小的机器设置次数。第一次加工需要设置1次,当下一次的木材的长度和宽度均大于等于正在加工的木材的长度和宽度时就不用重新设置。因此此题是一道很经典的贪心算法的题目。讲木材进行排序,然后遍历即可,需要注意的地方就是,有 (1,3),(1,5),(2,3),(2,4)的情况,所以应该标记每一根木材有没有被加工。
程序说明:我是采用结构体去保存单一木材信息。然后采用sort函数进行排序。
程序:
#include<bits/stdc++.h>
#define maxx 5001
using namespace std;
struct stu
{int l, w;bool tp; // 用来标记木材有没有被加工
};struct stu num[5000];bool cmp(struct stu a, struct stu b) //长度从小到大,相同重量从小到大
{if(a.l == b.l) return a.w < b.w ;else return a.l < b.l;
}int main()
{//freopen("in.txt","r",stdin);int n, i, mx, x, y, t, sum, j;while(cin >> n){t = 0;memset(num, 0 ,sizeof(num));for(i = 0; i < n; i++){cin >> num[i].l >> num[i].w;num[i].tp = 0;}sort(num, num+n,cmp);sum = 0;int wx;for(i = 0; i < n; i++){if(!num[i].tp) //如果没有被加工,则开始加工{wx = num[i].w;sum++;num[i].tp = 1; //标记为已加工for(j = i+1; j < n; j++)if(num[j].w >= wx && !num[j].tp) {num[j].tp = 1; //标记为已加工wx = num[j].w;} }}cout << sum << endl;}fclose(stdin);return 0;
}
ACM 木材加工问题相关推荐
- 网内计算:可编程数据平面和技术特定应用综述
网内计算:可编程数据平面和技术特定应用综述 摘要--与云计算相比,边缘计算提供了更靠近终端设备的处理,降低了用户体验的延迟.最新的In-Network Computing范例采用可编程网络元素在数据达 ...
- [JS]在ACM模式下获取输入
输入输出处理 核心代码模式处理 不需要处理任何输入输出,直接返回值即可. ACM 模式 你的代码需要处理输入输出,请使用如下样例代码读取输入和打印输出: while (line = readline( ...
- 九度OJ 1339:ACM (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:712 解决:379 题目描述: 今年的ACM世界总决赛快要开始了,需要有一个排名算法来对每支队伍进行现场排名.ACM组委会把这个任务交给了你 ...
- 【转】[退役]纪念我的ACM——headacher@XDU
转自:http://hi.baidu.com/headacher/item/5a2ce1d50609091b20e25022 退役了,是时候总结一下我ACM的生涯了.虽然很舍不得,但这段回忆很值得纪念 ...
- 做acm 需要学的算法
做acm 需要学的算法 转一个搞ACM需要的掌握的算法. 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什 ...
- [置顶]2010年东北大学ACM程序设计竞赛冬季校赛题解
8题只做出4题比较easy的题,而且做得挺麻烦,看来还要多练练. AC的题如下 NEUOJ 1112 I Love Apple Description So many people love app ...
- HDOJ 1157 HDU 1157 Who's in the Middle ACM 1157 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1157 题目描述: ...
- acm经典题Mark
著名的北邮ACM推荐50题 POJ推荐50题 1.标记"难"和"稍难"的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉. 2.标记为A and ...
- ACM训练小结-2018年6月16日
今天题目情况如下: A题:线段树+XOR性质. 情况:由于写法问题,调试困难,浪费大量时间. B题:(对所有满足i mod p==q,求a[i]之和),无修改,直接上n*sqrt(n)的分块写法. 情 ...
- 【杭电ACM】1097 A hard puzzle
[杭电ACM]1097 A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid=1097 先用int手写了算法结果竟然wrong answer ...
最新文章
- 2022-2028年全球与中国人字拖市场研究及前瞻分析报告
- SQL标准结构化语言练习,SQL增删查改,SQL实现对bank数据的操作
- WinCE5.0中应用程序如何直接写屏
- IOS开发基础知识--碎片45
- 查询选修c语言课程的学生学号和姓名,数据库实验(学生信息表)
- html网站开发与php网站开发_海南网站开发,网站建设,商城网站,功能性网站开发...
- 矩阵分析与多元统计II 二次型与二次曲面2 双线性函数
- OpenGL 基本帧缓冲对象实例
- threejs向量夹角和夹角方向
- js几种常见排序的实现
- 《SSM框架实战》 整合 Freemarker
- 4fsk调制matlab_数字调制解调技术的MATLAB与FPGA实现
- 制作登录注册密码找回网站常用控件
- mipi的dsi全称_MIPI扫盲——DSI介绍(二)
- Android 新一代多渠道打包神器
- TypeScript学习(一):原始数据类型的定义
- 附合导线坐标计算例题_附合导线计算例题步骤
- 归并排序 java_Java实现归并排序
- Chrome插件-Dark reader,护眼的黑暗模式浏览器
- 【Axure报错】-Unable to connect to Axure Share. Please make sure you have an internet connection and try