贪心算法 poj3069 Saruman's Army

题目链接:http://poj.org/problem?id=3069
中文大概意思:
在这里插入图片描述
在这里插入图片描述

思路:
在这里插入图片描述

代码:

#include <iostream>
#include <algorithm>
using namespace std;
int data[1010];
int fun(int R,int nums);
int main(){
    int R,nums;
    while(scanf("%d%d",&R,&nums) && (R!= -1 && nums!=-1)){
        for(int i = 0;i<nums;i++)
            scanf("%d",&data[i]);
        printf("%d\n",fun(R,nums));
    }
    return 0;
}
int fun(int R,int nums){
    sort(data,data+nums);
    int ans = 0;
    for(int i = 0;i<nums;){
        ans++; //i就是p1 ,ps:最后那一点零头也会被标记一次
        int j,k;
        for( j = i+1;j<nums && (data[j] - data[i] <= R);j++){ //循环到右边最后一个能覆盖p1的,为j-1点,j-1点为被标记点
            ;
        }
        for (k = j; k < nums&&(data[k] - data[j - 1] <= R); k++) {//循环到标记点半径不能在覆盖右边那一个点,即为k点
            ;
        }
        i = k;
    }
    return ans;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值