做的时候,头有点昏。糊里糊涂就ac了。。。
#include <iostream>
using namespace std;
int m1[100000],m2[100000];
int main()
{
int m;
int p[13],a,b,c;
while(scanf("%d",&m)==1&&m)
{
scanf("%d %d %d",&a,&b,&c);
int mp=0;
for(int i=1;i<=m;i++)
{
scanf("%d",&p[i]);
if(p[i]>mp)
mp=p[i];
}
for(int i=0;i<=mp;i++)
m1[i]=m2[i]=0;
for(int i=p[1];i<=mp;i++)
m1[i]=a*i+b*i;
for(int i=2;i<=m;i++)
{
for(int j=p[i];j<=mp;j++)
{
int min_s=10000000,s;
for(int k=p[i-1];k<=mp;k++)
{
if(k<j)
s=m1[k]+a*(j-k);
else
s=m1[k]+c*(k-j);
if(s<min_s)
min_s=s;
}
m2[j]=min_s+j*b;
}
for(int j=0;j<=mp;j++)
m1[j]=m2[j];
}
int min_s=m1[p[m]];
for(int i=p[m];i<=mp;i++)
if(m1[i]<min_s)
min_s=m1[i];
printf("%d\n",min_s); }
return 0;
}