题意:容易理解...
思路:dp[i]表示乌龟到达第i个充电站时最少花费时间到第 i 个充电站后,从起点开始遍历到第 i-1 个充电站,得到最少花费时间
状态转移方程:dp[i]=min(dp[j]+time(j-->i)); 1<=j<=i-1
代码实现:
#include<stdio.h> #include<string.h> int main() { int i,j,n; double l,c,t,vr,v1,v2,temp,len,min; double a[105],dp[105]; while(scanf("%lf",&l)!=EOF) { scanf("%d%lf%lf",&n,&c,&t); scanf("%lf%lf%lf",&vr,&v1,&v2); for(i=1;i<=n;i++) scanf("%lf",&a[i]); a[n+1]=l;a[0]=0;dp[0]=0; for(i=1;i<=n+1;i++) { min=100000000; for(j=i-1;j>=0;j--) { len=a[i]-a[j]; if(len>c) temp=c/v1+(len-c)/v2; else temp=len/v1; if(j) temp=temp+t; if(min>temp+dp[j]) min=temp+dp[j]; } dp[i]=min; } if(dp[n+1]>l/vr) printf("Good job,rabbit! "); else printf("What a pity rabbit! "); } return 0; }