(Relax ST1.17)POJ 3618 Exploration(求在t时间内能去n个景点中的几个)

本文探讨了一种算法,旨在解决在给定时间限制内,从起点出发,通过最多景点的问题。利用排序和比较绝对值的方法,实现高效路径规划。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每次一个人到离原点最近的一个景点(有正负)求最多能经过多少个景点?


/*
 * POJ_3618.cpp
 *
 *  Created on: 2013年11月26日
 *      Author: Administrator
 */


#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

const int maxn  = 50005;

int mark[maxn];

bool cmp(int a,int b){//***abs()用得妙....
	return abs(a) < abs(b);
}
int main(){
	int t,n;
	while(scanf("%d%d",&t,&n)!=EOF){
		memset(mark,0,sizeof(mark));

		int i;
		for(i = 1 ; i <= n ; ++i){
			scanf("%d",&mark[i]);
		}

		sort(mark+1,mark+1+n,cmp);

		int k = 1;
		int total = 0;
		if(mark[1] == 0){
			total = 1;
			k++;
		}

		int use_time = 0;
		for(; k <= n ; ++k){
			if(abs(mark[k] - mark[k-1]) <= t -use_time){//如果时间还够去下一个景点...
				total++;
				use_time += abs(mark[k] - mark[k-1]);
			}else{
				break;
			}
		}

		printf("%d\n",total);
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气的东哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值