分析:动态规划,一定要注意当前状态需要和前面所有的状态一起进行考虑,另外注意浮点数的处理,还WA了一次。
#include<iostream>
using namespace std;
int L,N,C,T,VR,VT1,VT2;
int a[105];
double dp[105];
double min_time_ij(int i_0,int j_0)
{
if(j_0-i_0>C)
return C*1.0f/VT1+(j_0-i_0-C)*1.0f/VT2;
else
return (j_0-i_0)*1.0f/VT1;
}
int main()
{
int i,j;
double min,value;
while(cin>>L)
{
cin>>N>>C>>T;
cin>>VR>>VT1>>VT2;
for(i=1;i<=N;i++)
cin>>a[i];
a[0]=0;
a[N+1]=L; //最终距离作为结尾
dp[0];
for(i=1;i<=N+1;i++)
{
min=1000000;
for(j=0;j<i;j++)
{
if(j==0) //一开始电动车有电
value=dp[j]+min_time_ij(a[j],a[i]);
else
value=dp[j]+min_time_ij(a[j],a[i])+T; //第j个站充电后直接到达i。
min=min<value?min:value;
}
dp[i]=min;
}
if(dp[N+1]<L*1.0f/VR)
cout<<"What a pity rabbit!"<<endl;
else
cout<<"Good job,rabbit!"<<endl;
}
return 0;
}
原文地址:http://blog.csdn.net/a809146548/article/details/45537531