HDU 4001 Working in Beijing

6082 ワード

HDU_4001
これは比較的容易な動的計画問題で、activityのたびにMは必ず上海にいるので、この状態になるには、前回のactivityが終わってから今までMは上海にいたか、前回のactivityが終わった後にMは北京に戻り、今回のactivityが始まる前日に上海に飛んだ(この場合、2回のactivityの間隔が2日以上あることを前提としている).どちらの場合も1つの費用が最小の場合を取ればよい.
#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
",k+1,cost[n-1]+a);
}
return 0;
}