hdu 2059 (龟兔赛跑)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012910051/article/details/52155383

dp   龟兔赛跑


题意:给出n个充电站的位置,每次充满电可以走Cm,问乌龟需要的最短时间。

题解:s=p[i]-p[j],分成两种情况  s>c和s<c   

<span style="font-size:18px;">#include<cstdio>
#include<algorithm>
#include<cstring>
#define M 10010010010
using namespace std;

int main(){
	int l,n,c,t,vr,vt1,vt2,i,j;
	double T1,T2,mint,ans,dp[110];//注意定义成double
	int p[110];
	int s;
	while (scanf ("%d",&l)!=EOF){
		scanf ("%d%d%d%d%d%d",&n,&c,&t,&vr,&vt1,&vt2);
		for (i=1;i<=n;i++){
			scanf ("%d",&p[i]);
		}
		p[0]=0;p[n+1]=l;dp[0]=0;
		for (i=1;i<=n+1;i++){
			mint=M;
			for (j=0;j<i;j++){
				s=p[i]-p[j];
				if (s>c)
				ans=c*1.0/vt1+(s-c)*1.0/vt2;
				else
				ans=s*1.0/vt1;
				ans+=dp[j];
				if (j)//是否充电
				ans+=t;
				if (mint>ans)
				mint=ans;
				
			}
			dp[i]=mint;
		}
		T1=dp[n+1];
		T2=l*1.0/vr;
		if (T1>T2)
		printf ("Good job,rabbit!\n");
		else
		printf ("What a pity rabbit!\n");
	}
	return 0;
}</span>


展开阅读全文

没有更多推荐了,返回首页