分析:动态规划,一定要注意当前状态需要和前面所有的状态一起进行考虑,另外注意浮点数的处理,还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