贪心专练3 最小标记数问题
2017-12-21 15:07
309 查看
题意:在一条直线上,有n个点。从这n个点中选择若干个,给他们加上标记。对于每一个点,其距离为R以内的区域里必须有一个被标记的点。问至少要有多少点被加上标记。
input:6 10 1 7 15 20 30 50
output: 3
————————————————————————————————————————————————————
思路:最优策略:在最左侧开始,往右找到最大R处接近R的地方标记,在此标记点处往右最大R处找到最大覆盖范围为一个周期。再从下一个未覆盖点开始重复该最优策略(即充分最大化R的覆盖区)
代码:
input:6 10 1 7 15 20 30 50
output: 3
————————————————————————————————————————————————————
思路:最优策略:在最左侧开始,往右找到最大R处接近R的地方标记,在此标记点处往右最大R处找到最大覆盖范围为一个周期。再从下一个未覆盖点开始重复该最优策略(即充分最大化R的覆盖区)
代码:
#include <stdio.h> int X[1000]; int main() { int N,R; while(scanf("%d%d",&N,&R)!=EOF) { int i; for(i=0; i<N; i++) scanf("%d",&X[i]); int k=0; int cnt=0; while(k<N) { int s=X[k++];//S用来记录当前位置同时把光标移动到下一位置 while(k<N&&X[k]<=s+R)k++;记录标记点左侧做大覆盖区 int p=X[k-1];标记点 while(k<N&&X[k]<=p+R)k++;记录标记点右侧最大覆盖区 cnt++; } printf("最少标记点数为: %d\n",cnt); } return 0; }
相关文章推荐
- 贪心算法——字典序最小问题,Saruman‘s Army
- 字典序最小问题 (贪心)
- (Relax 贪心1.4)POJ 2325 Persistent Numbers(使用贪心策略解决这么一个问题: 给定一个数n,求一个最小的数m,使得m的各位的乘积==n)
- 字典序最小问题--贪心入门
- 字典序最小问题-贪心-Best Cow Line-POJ3617
- 贪心——区间覆盖问题之区间完全覆盖最小区间数
- 【二分答案+贪心】解决“最小值最大”问题(UVa 12124 - Assemble)
- UVA 10020——Minimal coverage(最小覆盖,贪心问题)
- Stall Reservations 贪心+自定义优先级的优先队列(求含不重叠子序列的多个序列最小值问题)
- uva 10020 Minimal coverage(贪心-最小覆盖问题)
- bzoj 1196: [HNOI2006]公路修建问题(贪心+最小生成树)
- 字典序最小问题 前后删除加入 贪心poj3617
- nyoj+贪心过河问题+借助于最轻的两个让最胖的过去花费最小。
- uva 10020 Minimal coverage(贪心-最小覆盖问题)
- 字典序最小问题(贪心)
- 步步为营(六)贪心(5)最小区间覆盖问题
- ACM知识点 之 贪心(5)最小区间覆盖问题
- 最小值最大化问题(贪心系列)
- 贪心算法——字典序最小问题
- [网络流24题]魔术球问题 贪心||枚举答案+最小路径覆盖