HDU NO.1051 Wooden Sticks(区间贪心)
2016-01-24 20:57
176 查看
问题描述:
给n根木棍的长度和重量。根据要求求出制造木棍的最短时间。制造第一个木棍需要1分钟,若是接着要制造的木棍重量和长度都比此木棍长就不需要的时间,若是没有,则再需要1分钟。求时间最小为多少。
题目链接:点击打开链接
思路:
首先按照长短进行排序,紧接着比较重量,已经拍好循序的做一下标记,然后再进行第二轮...
代码:
给n根木棍的长度和重量。根据要求求出制造木棍的最短时间。制造第一个木棍需要1分钟,若是接着要制造的木棍重量和长度都比此木棍长就不需要的时间,若是没有,则再需要1分钟。求时间最小为多少。
题目链接:点击打开链接
思路:
首先按照长短进行排序,紧接着比较重量,已经拍好循序的做一下标记,然后再进行第二轮...
代码:
#include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<algorithm> #define INF 0x3f3f3f3f using namespace std; const int MAX = 10086; int main(){ int n, m; cin >> n; while(n--){ cin >> m; int A[MAX], B[MAX]; pair<int, int> arr[MAX]; for(int i = 0; i < m; i++) scanf("%d%d", &arr[i].first, &arr[i].second); sort(arr, arr + m); int cnt = 1, ans = 1; int p = arr[0].second; //遍历以长度排序好的数组,取第一个,然后比较其余的 while(ans < m){ for(int i = 1; i < m; i++){ if(p <= arr[i].second && arr[i].first){ p = arr[i].second; //已经排好序的就把第一个值赋值为零 arr[i].first = 0; ans++; }else continue; } //第一轮完成后,在未排进循序的组合中选取第一个 for(int i = 1; i < m; i++){ if(arr[i].first){ p = arr[i].second; break; } } //必须保证还有未排好的组合才能多加一分钟 if(ans < m) cnt++; } cout << cnt << endl; } return 0; }
相关文章推荐
- 关于80286——《x86汇编语言:从实模式到保护模式》读书笔记15
- 深入浅出Node.js (10) - 测试
- 深入浅出Node.js (9) - 玩转进程
- MySQL下载及安装
- 大数据IMF传奇 第19课 spark 二次排序 使用JAVA自定义key 进行二次排序
- C#例子之画图
- socket广播
- Sine之舞
- UESTC 1262: Memory【模拟】
- c#的注释
- 聚类总结
- OC从plist文件中获取数据
- Net中String是引用类型还是值类型
- 深入浅出Node.js (8) - 构建Web应用
- 在HTML5中如何提高网站前端性能
- c# process 输入输出
- js中将字符串转换成数组的方式
- 使用shell/python获取hostname/fqdn释疑(转)
- 【jQuery基础学习】00 序
- 深入浅出Node.js (7) - 网络编程