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;
}


 

原文地址:https://www.cnblogs.com/jackes/p/2422422.html