hdu1158
来源:互联网 发布:360借壳昊华能源大数据 编辑:程序博客网 时间:2024/05/16 19:08
/*
分析:
i为月数,l为人数,num[i]为第i月需要多少人,total是最多要多少人。
dp[i][l]=min(dp[i-1][k]+l*s+k>l?(k-l)*f:(l-k)*h) num[i-1]<=k<=total
ans=min(dp[最后一月][k]) num[最后一月]<=k<=total
2012-05-17
*/
分析:
i为月数,l为人数,num[i]为第i月需要多少人,total是最多要多少人。
dp[i][l]=min(dp[i-1][k]+l*s+k>l?(k-l)*f:(l-k)*h) num[i-1]<=k<=total
ans=min(dp[最后一月][k]) num[最后一月]<=k<=total
2012-05-17
*/
#include"stdio.h"int min(int a,int b){return a>b?b:a;}int main(){int n;int h,s,f;int num[15];int i,l,j;int total;int dp[12][1011];int ans;while(scanf("%d",&n),n){scanf("%d%d%d",&h,&s,&f);total=0;for(i=0;i<n;i++)//i从0开始{scanf("%d",&num[i]);if(total<num[i])total=num[i];}if(total==0){printf("0\n");continue;}for(l=num[0];l<=total;l++)dp[0][l]=l*(h+s);for(i=1;i<n;i++){for(l=num[i];l<=total;l++){if(num[i-1]>l)dp[i][l]=dp[i-1][num[i-1]]+l*s+(num[i-1]-l)*f;elsedp[i][l]=dp[i-1][num[i-1]]+l*s+(l-num[i-1])*h;for(j=num[i-1]+1;j<=total;j++){if(j>l)dp[i][l]=min(dp[i][l],dp[i-1][j]+l*s+(j-l)*f);elsedp[i][l]=min(dp[i][l],dp[i-1][j]+l*s+(l-j)*h);}}}ans=111111111;for(l=num[n-1];l<=total;l++)ans=min(dp[n-1][l],ans);printf("%d\n",ans);}return 0;}
- hdu1158
- hdu1158
- hdu1158
- HDU1158
- HDU1158(dp46)
- hdu1158【DP】
- hdu1158(dp)
- HDU1158 动态规划
- HDU1158 动态规划
- hdu1158 动态规划
- hdu1158 Employment Planning
- HDU1158 Employment Planning
- HDU1158 Employment Planning
- hdu1158 Common Subsequence
- HDU1158:Employment Planning(DP)
- hdu1158 Employment Planning
- HDU1158 Employment Planning
- hdu1158 2010.3.5
- 自电容和互电容两种屏的工作原理
- 黑马程序员_字符编码
- hadoop工作流引擎解压jar文件,并运行出现类型不匹配的情况
- hdu 4137 Manhattan Sort 贪心 想法
- CodeForces #120 DIV2
- hdu1158
- js中this的总结
- 我的java思想012:空指针错误的情况总结
- Linux查看文件编码格式及文件编码转换
- MFC 如何判断字符串的长度 如何实现字符串与数组之间的转换
- 多线程程序中操作的原子性
- MFC CWinApp對象在初始化的時候就自動保存在hInstance的值
- hdu 4141 DFS
- CORBA简介(转载)