POJ3069

来源:互联网 发布:淘宝固定悬浮导航 编辑:程序博客网 时间:2024/06/06 03:49

贪心  点最大覆盖问题

排序 从小到大排序

从第一个点A1 向右扩展R

然后找出这个范围内  最靠左的点 把他标记  把这个点写作A2

最后以A2向右扩展,找到出界的第一个点,记作A3,


从A3开始向右扩展R

然后找出这个范围内最靠左的点 把他标记  把这个店写作A4

最后以A4向右扩展,找到出界的第一个点,记作A5,

..................................................

.................................................

所有的点遍历完。

#include"iostream"#include"algorithm"using namespace std;int main(){int R,n;while(cin>>R>>n){if(R==-1&&n==-1) break;int a[2000];for(int i=0;i<n;i++)scanf("%d",a+i);sort(a,a+n);int ans=0;for(int i=0;i<n;){int t=a[i]+R;   //当前点向右扩展 Rint j=i;while(a[j]<=t&&j<n)  //找出这个范围内最靠右的点,这个点不能出界j++;ans++;  //标记一次j--;                //j是比找到点的位置超前一个的。t=a[j]+R;  while(a[j]<=t&&j<n)   //然后从标记位置向右继续扩展 找到出界的第一个点,从这个点开始循环 然后向右扩展R找到最靠右的点标记...j++;i=j;}cout<<ans<<endl;}return 0;}





0 0
原创粉丝点击