//
// main.cpp
// Richard
//
// Created by 邵金杰 on 16/9/26.
// Copyright © 2016年 邵金杰. All rights reserved.
//
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=15;
int h,s,f;
int a[maxn];
int dp[15][maxn*10];
int abs(int x) {return x>0?x:-x;}
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
int MAX=0;
scanf("%d%d%d",&h,&s,&f);
for(int i=1;i<=n;i++) {scanf("%d",&a[i]);MAX=max(MAX,a[i]);}
a[0]=0;
memset(dp,0x7f,sizeof(dp));
dp[0][0]=0;
for(int i=1;i<=n;i++)
{
for(int j=a[i];j<=MAX;j++)
{
for(int k=a[i-1];k<=MAX;k++)
{
int sa=j-k;
int sum;
if(sa<0) sum=sa*f;
else sum=sa*h;
dp[i][j]=min(dp[i][j],dp[i-1][k]+abs(sum)+s*j);
}
}
}
int ans=99999999;
for(int i=a[n];i<=MAX;i++) ans=min(ans,dp[n][i]);//一开始把min写成了max,WA了好久
cout<<ans<<endl;
}
return 0;
}
HDU 1158 Employment Planning(dp)
最新推荐文章于 2020-07-11 20:50:23 发布