POJ 1065 Wooden Sticks
2015-08-22 13:56
399 查看
题意:我们要处理一些木棍,第一根的时间是1分钟,另外的,在长度为l,重为w的木棍后面的那根的长度为l’, 重量w’,只要l
<=l’ 并且w
<= w’,就不需要时间,否则需要1分钟,求如何安排处理木棍的顺序,才能使花的时间最少。
题解:贪心,首先按照长度重量从小到大排序一遍,然后做如下操作:选取当前没有被标记的最小的木棍,记录下它的长度和重量为x,y,然后向后处理,满足长度重量均大的做个标记,更新x,y,重复操作,直到没有未被标记的木棍,重复次数即为答案。
<=l’ 并且w
<= w’,就不需要时间,否则需要1分钟,求如何安排处理木棍的顺序,才能使花的时间最少。
题解:贪心,首先按照长度重量从小到大排序一遍,然后做如下操作:选取当前没有被标记的最小的木棍,记录下它的长度和重量为x,y,然后向后处理,满足长度重量均大的做个标记,更新x,y,重复操作,直到没有未被标记的木棍,重复次数即为答案。
#include<cstdio> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include <iostream> #include <queue> #include <stack> #include <vector> #include <map> #include <set> #define INF 0x3f3f3f3f #define maxn 1000010 #define mem(a) memset(a,0,sizeof(a)) using namespace std; typedef long long ll; struct node { int l,w,f; bool operator < (const node & x) const { if(l == x.l) return w < x.w; return l < x.l; } }a[5050]; int main(){ int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i = 0; i < n; i++) { scanf("%d%d",&a[i].l,&a[i].w); a[i].f = 0; } sort(a,a+n); int ans = 0; int x = 0,y = 0,flag = 0,k = 0; while(1) { for(int i = k; i < n; i++) { if(!a[i].f && a[i].l >= x && a[i].w >= y) { x = a[i].l; y = a[i].w; a[i].f = 1; } else if(!a[i].f && !flag) { flag = 1; k = i; } } ans++; if(!flag) break; flag = 0; x = 0; y = 0; } printf("%d\n",ans); } return 0; }
相关文章推荐
- 字符串匹配:KMP算法, Boyer-Moore算法理解与总结
- hdu 4294 第一发SAP
- 抽象类详解
- Good Bye 2014 B. New Year Permutation 并查集 最短路 floyed算法
- mhVTL的安装与应用
- C++内存分配一:C++程序内存的基本组成
- Python 日期处理——datetime包学习(上)
- [译] C track: compiling C programs.
- 《STL源代码分析》---stl_stack.h读书笔记
- MongoDB查询简单语法
- 启动和停止MySQL服务
- 提高PHP编程效率的20个要点(转)
- CSS的table的实现,实现表格的单行边框显示,换行显示效果
- hdu2897 巴什博奕
- uva 11235 Frequent values RMQ问题
- codecombat之KithGard地牢1-18关代码分享
- Dubbo框架——基础用例
- 自适应布局
- 条件编译 #ifndef、#def、#endif 等宏的意义及其用法
- DNS相关