HDU_1158 Employment Planning

来源:互联网 发布:excel数据透视怎么做 编辑:程序博客网 时间:2024/04/30 16:55

题目很容易理解,就不说了!

 

/*简单DP,转移方程:dp[i][j] = min(dp[i-1][k]+cost);第i个月,雇佣人数为j时的最小花费 k 为 上一个月 最小人数 到 最大人数*/#include<stdio.h>#include<stdlib.h>#include<string.h>#define INF 0x7fffffff#define N 1000int g[N];int dp[12][N];int n,hire,salay,fire,max;void solve(){int i,j,k,min,tmp;for(i=g[0];i<=max;i++)//初始化dp[0][i] = (hire + salay) * i;for(i=1;i<12;i++){for(j=g[i];j<=max;j++){min = INF;for(k=g[i-1];k<=max;k++){if(k>j){tmp = dp[i-1][k] + fire*(k-j) + salay*j;}else tmp = dp[i-1][k] + hire*(j-k) + salay*j;if(tmp < min)min = tmp;}dp[i][j] = min;}}min = INF;for(i=g[n-1];i<=max;i++)if(dp[n-1][i] < min)min = dp[n-1][i];printf("%d\n",min);}int main(){int i;while(scanf("%d",&n),n){scanf("%d%d%d",&hire,&salay,&fire);max = 0;for(i=0;i<n;i++){scanf("%d",&g[i]);if(g[i]>max)max = g[i];}solve();}return 0;}

原创粉丝点击