苹果c++

这段代码展示了如何使用C++解决农夫John接苹果的问题,通过动态规划方法找到在给定时间和速度条件下接最多苹果的策略。
摘要由CSDN通过智能技术生成

提交数: 375, 通过率: 32%, 平均分: 52.92

题目描述:

农场的夏季是收获的好季节。在Farmer John的农场,他们用一种特别的方式来收苹果:Bessie摇苹果树,苹果落下,然后Farmer John尽力接到尽可能多的苹果。

作为一个有经验的农夫, Farmer John将这个过程坐标化。他清楚地知道什么时候(1<=t<=1,000,000)什么位置(用二维坐标表示,-1000<=x,y<=1000)会有苹果落下。他只要苹果下落时刻到达那个位置,才能接到那个位置掉下的苹果。

一个单位时间,Farmer John能走直线距离s(1<=s<=1000)个单位。假设他开始时(t=0)站在(0,0)点,他最多能接到多少个苹果?

输入格式:

第一行:两个整数,N(苹果个数,n<=5000)和S(速度);

第2..N+1行:每行三个整数Xi,Yi,Ti,表示每个苹果掉下的位置和落下的时间。

输出格式:

仅一行,一个数,表示最多能接到几个苹果

样例输入:
5 3
0 0 1
0 3 2
-5 12 6
-1 0 3
-1 1 2

样例输出:
3
提示:

样例解释:
3    (Farmer John可以接到第1,5,4个苹果)

#include<bits/stdc++.h>
using namespace std;
struct f2{
	int x,y,z,t;
} a[6001];
int n,f[6001];
int s;
bool cmp(f2 x,f2 y)
{
	return x.t<y.t;
}
double d(int i,int j)
{
	int x=a[i].x-a[j].x,y=a[i].y-a[j].y;
	double z=sqrt(x*x+y*y);
	return z;
}
int main()
{
	cin>>n>>s;
	for (int i=1;i<=n;i++)
	{
		cin>>a[i].x>>a[i].y>>a[i].t;
	}
	sort(a+1,a+1+n,cmp);
	int ans=0;
	for (int i=1;i<=n;i++)
	{
		for (int j=i-1;j>=0;j--)
		{
			if (j==0||(j!=0&&f[j]!=0)) if (d(i,j)<=(a[i].t-a[j].t)*1.0*s) f[i]=max(f[i],f[j]+1);
		}
		ans=max(ans,f[i]);
	}
	cout<<ans;
	return 0;
}

时间限制: 1000ms
空间限制: 128MB

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值