HDU 1158 Employment Planning
来源:互联网 发布:各种排序算法的优缺点 编辑:程序博客网 时间:2024/05/17 08:35
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1158
题意:一个工厂每个月要雇佣一定数量的工人工作,每人每月都有一定的工资,且雇佣和辞退工人都要花费hire和fire数量的钱。问怎样安排工人使m个月的开销最少。
分析:DP。dp[i][i]表示前i个月雇佣j个工人的最小花费。
Source Code:
#include<iostream>#include<cstdio>using namespace std;#define Min(a,b) ((a)<(b)?(a):(b))int dp[13][1010],num[13];int h,s,f,ans,m,MaxNum,MinNum;const int inf=0x3f3f3f3f;int main(){ while(scanf("%d",&m),m){ scanf("%d %d %d",&h,&s,&f); MaxNum=0; for(int i=1;i<=m;i++){ scanf("%d",&num[i]); if(num[i]>MaxNum) MaxNum=num[i]; } for(int i=num[1];i<=MaxNum;i++) dp[1][i]=i*(h+s); for(int i=2;i<=m;i++){ for(int j=num[i];j<=MaxNum;j++){ MinNum=inf; for(int k=num[i-1];k<=MaxNum;k++){ if(k>=j) MinNum=Min(MinNum,dp[i-1][k]+j*s+(k-j)*f); else MinNum=Min(MinNum,dp[i-1][k]+j*s+(j-k)*h); } dp[i][j]=MinNum; } } MinNum=inf; for(int i=num[m];i<=MaxNum;i++) MinNum=Min(MinNum,dp[m][i]); printf("%d\n",MinNum); } return 0;}
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- HDU 1158 Employment Planning
- HDU 1158 Employment Planning
- HDU 1158 Employment Planning
- HDU 1158 Employment Planning
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- HDU 1158 Employment Planning
- HDU 1158 Employment Planning
- HDU 1158 Employment Planning
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- HDU 1158 Employment Planning
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- 解决Android模拟器打不开的问题!
- Excel中如何快速录入时间日期
- Ubuntu安装ibus google拼音
- MediaPlayer(待续。。。)
- C#之RC6算法
- HDU 1158 Employment Planning
- 如何判断windows系统是64位
- java笔记1:String, StringBuffer,StringBuilder
- redhat 5.4下设置回收站简介
- C# equals与==的区别
- php对象参数传值
- Android学习之解析JSON
- 时间过得好快,来纽约已经满一个月了
- 点start debug session 后会自动Run