HDU_4001
这个是一个相对容易的动态规划题,由于每次activity的时候M一定是在上海的,因而要达到这个状态,要么从前一次activity结束一直到现在M一直在上海,要么在上一次activity结束之后M飞回了北京,并在这次activity开始前一天飞到了上海(这种情况的前提是两次activity之间的间隔时间大于或等于2天),在两种情况中取一个花费最小的情况即可。
#include<stdio.h>
#include<string.h>
int n,a,b,d[100010];
double cost[1000010];
int main()
{
int i,j,k,t;
double temp;
scanf("%d",&t);
for(k=0;k<t;k++)
{
scanf("%d%d%d",&n,&a,&b);
for(i=0;i<n;i++)
scanf("%d",&d[i]);
cost[0]=a+b;
for(i=1;i<n;i++)
{
cost[i]=cost[i-1]+(d[i]-d[i-1])*b;
if(d[i]-d[i-1]>2)
{
temp=cost[i-1]+2*a+b;
if(temp<cost[i])
cost[i]=temp;
}
}
printf("Case #%d: %.0f\n",k+1,cost[n-1]+a);
}
return 0;
}