uva 10020 Minimal coverage
2016-04-27 20:47
232 查看
题意:给你N条线段(Li,Ri)映射到x轴上,然后让你用其中的几条线段(条数最少)覆盖【0,M】
方法:利用贪心思想。对线段按照长度进行排序,在这里可以在输入的时候,对线段进行选择,如果Ri<0||Li>M这直接删除。然后每次在选择线段的时候,尽可能的选择长的,这里用到了贪心思想
方法:利用贪心思想。对线段按照长度进行排序,在这里可以在输入的时候,对线段进行选择,如果Ri<0||Li>M这直接删除。然后每次在选择线段的时候,尽可能的选择长的,这里用到了贪心思想
#include <cstdio> #include <iostream> #include <sstream> using namespace std; struct NODE { int x,y; }; NODE node1[100010],node2[100010]; int main() { int m; int p =0; // int L[50005],R[50005]; //char a[250]; scanf("%d",&m); for(; p < m; p++) { if(p != 0) printf("\n"); int n,l,r; // int temp = 0; int p1 = 0; int p2 = 0; scanf("%d",&n); while(scanf("%d %d",&l,&r)&&(l || r)) { if(r > 0) { p1 ++; node1[p1].x = l; node1[p1].y = r; } } int Min =0,Max =0; int flag =0; int index; while(1) { if(Min >= n) break; Max = 0; flag = 0; for(int i = 1; i<=p1;i++) { if(Min >= node1[i].x && Max < node1[i].y) { index = i; flag = 1; Max = node1[i].y; } } if(flag) { ++p2; node2[p2] = node1[index]; Min = node1[index].y; //对左边贪心 // printf("node2x --- %d\nnode2y ----- %d\n",node1[index].x,node1[index].y); } else break; } if(flag) { printf("%d\n",p2); for(int i = 1; i <= p2; i++) printf("%d %d\n",node2[i].x,node2[i].y); } else printf("0\n"); } return 0; }
相关文章推荐
- <input >上传图片文件的解说
- 《Linux内核分析》期终总结
- hdu 1176 免费馅饼
- 计算机系统的数位与进制
- SocketChannel与ServerSocketChannel
- 在用i/o流做学生管理系统是的一些错误点总结
- C#小练习
- Shell 脚本知识回顾 (六) —— Shell 函数
- 《Hibernate学习笔记二》:表与实体类的映射方法
- Python中配置matplotlib模块
- 1.win7与Ubuntu文件共享工具-Samba安装及使用方法
- android 拍照 相册 剪切以及显示功能
- jQuery--百度百科
- 剑指offer-面试题56:链表中环的入口结点
- 欢迎使用CSDN-markdown编辑器
- C/C++中各种类型int、long、double、char表示范围(最大最小值)
- Windows核心编程之CloseHandle
- 快速排序
- JSP--百度百科
- opencv成长之路2:一段用来获取摄像头视频的代码