题目大意:你可以雇佣,开除雇员,当然你得支付给任何一个在职雇员薪水,就算他不工作。请告诉我要完成工作,最少的花费是多少。
#include<iostream>
using namespace std;
int dp[15][1100];
int a[13];
int main()
{
int n;
int hire,cost,fire;
while(cin>>n,n)
{
cin>>hire>>cost>>fire;
int max=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(max<a[i])
max=a[i];
}
for(int i=a[1];i<=max;i++)
dp[1][i]=i*(hire+cost);
int min=1000000;
for(int i=2;i<=n;i++)
for(int j=a[i];j<=max;j++)
{
min=0x7fffffff;//最大值
int temp;
for(int k=a[i-1];k<=max;k++)
{
if(j<k)
temp=j*cost+(k-j)*fire+dp[i-1][k];
else
temp=j*cost+(j-k)*hire+dp[i-1][k];
if(min>temp)
min=temp;
}
dp[i][j]=min;
}
min=0x7fffffff;
for(int i=a[n];i<=max;i++)
if(min>dp[n][i])
min=dp[n][i];
cout<<min<<endl;
}
}