hdu 2059 水题 dp 线性dp 双层循环进行枚举 good rabbit
dp主要是找到状态方程,大多运用双层循环,进行整体最优解的积累,像数塔,时间安排
比较困难的就需要循环加条件判断比较,还有比较需要熟悉的是一般都是先从后往前递归出方程,
在进行递推编码
#include <stdio.h>
int main()
{
int i,j;
int n,c,t;
int vt,v1,v2;
int len;
int p[102];
double e,min,dp[102]={0};
while(scanf("%d",&len)!=EOF)
{
scanf("%d%d%d",&n,&c,&t);
scanf("%d%d%d",&vt,&v1,&v2);
for(i=1;i<n+1;i++)scanf("%d",&p[i]);
p[0]=0;
p[i]=len;
for(i=1;i<n+2;i++)
{
min=0x7f7f7f7f;
for(j=0;j<i;j++)
{
int l=p[i]-p[j];
e=l>c?(c*1.0/v1+(l-c+0.0)/v2):l*1.0/v1;
e+=dp[j];
if(j)e+=t;
if(min>e)min=e;
}
dp[i]=min;
}
printf(dp[n+1]>(len*1.0/vt)?"Good job,rabbit!\n":"What a pity rabbit!\n");
}
return 0;
}