天天看點

1264. Atomic Car Race (dp)

#include <iostream>  //basic dp problem
#include <iomanip>
using namespace std;

int main()
{
	int n;
	while(cin>>n&&n)
	{
		double times[10007]; //time cost after x driving distance
		double dp[107]; // dp[i-1] stand for the shortest time cost arriving checkpoint i 
		double b,v,e,f;
		int r,a[107];
		for(int i=0;i<n;i++)
			cin>>a[i];
		cin>>b>>r>>v>>e>>f;
		times[0]=0;
		for(int i=0;i<a[n-1];i++)
		{
			if(i<r) times[i+1]=times[i]+1/(v-f*(r-i));
			else  times[i+1]=times[i]+1/(v-e*(i-r));
		}   //initial time expense
		for(int i=0;i<n;i++)
		{
			dp[i]=times[a[i]];
			for(int j=0;j<i;j++)
				dp[i]=min(dp[i],dp[j]+times[a[i]-a[j]]+b);
		}
		cout<<fixed<<setprecision(4)<<dp[n-1]<<endl;
	}
	return 0;
}
           

繼續閱讀