HDU 1158 Employment Planning (DP)
题意 : n个月,每个月都至少需要mon[i]个人来工作,然后每次雇佣工人需要给一部分钱,每个人每个月还要给工资,如果解雇人还需要给一笔钱,所以问你主管应该怎么雇佣或解雇工人才能使总花销最小。
样例解释 : 3个月,雇佣一个工人需要4钱,每个工人每个月的工资是5钱,解雇一个工人需要6钱。然后这三个月每个月需要的工人数最少分别是10人9人11人。0结束输入
3
4 5 6
10 9 11
0
主管在一开始就招10个人并且第二个月不解雇,因为解雇比他工资贵,需要花费40+50+50 = 140,第三个月再雇佣一个4+55 = 59加起来就是199,这是最少的花费,因为其他都是比这个多的。
思路 : 我觉得吧,这道DP题挺复杂的,dp[i][j]代表前 i 个月里雇佣j个人需要的最小花费,然后接下来就要找前一个状态,前一个状态要找最小值,也就是说要看一下,这个月相比前一个月是否需要雇佣或者是解雇,都要算出来然后取最小值。
//HDU 1158
#include <stdio.h>
#include <string.h>
#include <iostream> using namespace std ; int cost[][] ;
int mon[] ;
int main()
{
int n ,a,b,c;
while(~scanf("%d",&n))
{
if(n == ) break ;
scanf("%d %d %d",&a,&b,&c) ;
int maxx = ;
for(int i = ; i < n ; i ++)
{
scanf("%d",&mon[i]) ;
maxx = max(maxx,mon[i]) ;
}
memset(cost,,sizeof(cost)) ;
int minn = mon[],minx ;
for(int j = minn ; j <= maxx ; j++)
cost[][j] = a*j+b*j ;
for(int i = ; i < n ; i++)
{
for(int j = mon[i] ; j <= maxx ; j++)
{
minx = ;
for(int k = mon[i-] ; k <= maxx ; k++)
{
if(j > k)
{
if(((j-k)*a+cost[i-][k]+j*b) < minx)
minx = (j-k)*a+cost[i-][k]+j*b ;
}
else
{
if(((k-j)*c+cost[i-][k]+j*b) < minx)
minx = (k-j)*c+cost[i-][k]+j*b ;
}
}
cost[i][j] = minx ;
}
minn = mon[i] ;
}
minx = ;
for(int k = minn ; k <= maxx ; k++)
if(cost[n-][k] < minx)
minx = cost[n-][k] ;
printf("%d\n",minx) ;
}
return ;
}
HDU 1158 Employment Planning (DP)的更多相关文章
- hdu 1158 Employment Planning(DP)
题意: 有一个工程需要N个月才能完成.(n<=12) 给出雇佣一个工人的费用.每个工人每个月的工资.解雇一个工人的费用. 然后给出N个月所需的最少工人人数. 问完成这个项目最少需要花多少钱. 思 ...
- hdu1158 Employment Planning(dp)
题目传送门 Employment Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- HDU 1158 Employment Planning【DP】
题意:给出n个月,雇佣一个人所需的钱hire,一个人工作一个月所需要的钱salary,解雇一个人所需要的钱fire,再给出这n个月每月1至少有num[i]个人完成工作,问完成整个工作所花费的最少的钱是 ...
- HDU 4049 Tourism Planning(动态规划)
Tourism Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 5791:Two(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Problem Description Alice gets two sequences A ...
- HDU 4833 Best Financing(DP)(2014年百度之星程序设计大赛 - 初赛(第二轮))
Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[ ...
- Hdu 1158 Employment Planning(DP)
Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1158 一道dp题,或许是我对dp的理解的还不够,看了题解才做出来,要加油了. 只能先上代码了 ...
- HDU 4833 Best Financing (DP)
Best Financing Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 1158 Employment Planning
又一次看题解. 万事开头难,我想DP也是这样的. 呵呵,不过还是有进步的. 比如说我一开始也是打算用dp[i][j]表示第i个月份雇j个员工的最低花费,不过后面的思路就完全错了.. 不过这里还有个问题 ...
随机推荐
- Headfirst设计模式的C++实现——复合模式
observer.h #ifndef _OBSERVER_H_ #define _OBSERVER_H_ #include <string> class Observer { public ...
- ALI OSS RequestTimeTooSkewed
php版阿里oss sdk,请求时抛RequestTimeTooSkewed错误,说时间差距太大,搜了一下发现是服务器的时间设置问题. 我们在安装完Centos Linux操作系统之后,点击系统的时间 ...
- spring-cloud-turbine
turbine主要用于聚合hystrix的监控数据 依赖pom <dependencyManagement> <dependencies> <dependency> ...
- jquery获得option的值(示例)
jquery获得option的值和对option的操作. jQuery获取Select元素,并选择的Text和Value: 复制代码代码如下: $("#select_id").ch ...
- ARM-Linux S5PV210 UART驱动(4)----串口驱动初始化过程
对于S5PV210 UART驱动来说,主要关心的就是drivers/serial下的samsung.c和s5pv210.c连个文件. 由drivers/serial/Kconfig: config S ...
- Python在Windows下开发环境配置汇总
最近比较关注学习Python方面的资料和课程,由于Python本身基本都是在Linux下开发,本人windows用习惯了初用Linux各种别扭啊. 下面将我在配置Windows环境下的禁言写出来,与大 ...
- N皇后问题2
Description Examine the checkerboard below and note that the six checkers are arranged on the board ...
- FragmentActivity和Activity的具体区别在哪里
fragment是3.0以后的东西,为了在低版本中使用fragment就要用到android-support-v4.jar兼容包,而fragmentActivity就是这个兼容包里面的,它提供了操作f ...
- grunt项目配置
安装完CLI,还要在项目安装Grunt npm install -g grunt-cli npm install grunt --save-dev 源码放在src下 package.json放在根目录 ...
- centos6.5安装配置LDAP服务[转]
安装之前查一下 1 find / -name openldap* centos6.4默认安装了LDAP,但没有装ldap-server和ldap-client 于是yum安装 1 su root 2 ...