题意:给出n个月,雇佣一个人所需的钱hire,一个人工作一个月所需要的钱salary,解雇一个人所需要的钱fire,再给出这n个月每月1至少有num[i]个人完成工作,问完成整个工作所花费的最少的钱是多少。

用dp[i][j]表示在第i个月雇佣j个人所需要的最少花费

先考虑只解雇人和聘请人的情况

1 for(j=num[i];j<=sum;j++)
2             {
3                 if(j>num[i-1])//说明雇佣了人
4                 dp[i][j]=dp[i-1][num[i-1]]+j*salary+(j-num[i-1])*hire;
5                 else//说明解聘了人
6                 dp[i][j]=dp[i-1][num[i-1]]+j*salary+(num[i-1]-j)*fire;
7 }

再考虑状态转移,可以举一个例子--
假如一个人的工资是5元,但是解雇他要花500元,这样比较下,把这个人留在下一个月继续工作显然开销会小很多,同理对于k个人也是一样的。

1 for(k=num[i-1]+1;k<=sum;k++)
2                 {
3                 if(k<j) //不够下一个月的人数,需要聘请人
4                 dp[i][j]=min(dp[i][j],dp[i-1][k]+j*salary+(j-k)*hire);
5                 else//超过下一个 月的人数,需要解雇人
6                 dp[i][j]=min(dp[i][j],dp[i-1][k]+j*salary+(k-j)*fire);
7                 }

然后就是初始化,对于第一个月, 花的钱为:(hire+salary)*人数

最后扫一遍最后一个月雇佣不同人数(在满足人数大于num[n-1]的情况下),得出最小值。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6
 7 int dp[15][1005];
 8 int num[15];
 9
10 int main()
11 {
12     int n,i,j,k,ans,hire,salary,fire,sum;
13     while(scanf("%d",&n)!=EOF&&n)
14     {   sum=-5;
15         scanf("%d %d %d",&hire,&salary,&fire);
16         for(i=0;i<n;i++) {scanf("%d",&num[i]);sum=max(sum,num[i]);}
17         memset(dp,0,sizeof(dp));
18
19         for(i=num[0];i<=sum;i++)
20         dp[0][i]=i*(hire+salary);
21
22         for(i=1;i<n;i++)
23         {
24             for(j=num[i];j<=sum;j++)
25             {
26                 if(j>num[i-1])//说明雇佣了人
27                 dp[i][j]=dp[i-1][num[i-1]]+j*salary+(j-num[i-1])*hire;
28                 else//说明解聘了人
29                 dp[i][j]=dp[i-1][num[i-1]]+j*salary+(num[i-1]-j)*fire;
30                 for(k=num[i-1]+1;k<=sum;k++)
31                 {
32                 if(k<j) //不够下一个月的人数,需要聘请人
33                 dp[i][j]=min(dp[i][j],dp[i-1][k]+j*salary+(j-k)*hire);
34                 else//超过下一个 月的人数,需要解雇人
35                 dp[i][j]=min(dp[i][j],dp[i-1][k]+j*salary+(k-j)*fire);
36                 }
37             }
38         }
39         ans=10000005;
40         for(i=num[n-1];i<=sum;i++)
41         ans=min(ans,dp[n-1][i]);
42         printf("%d\n",ans);
43     }
44     return 0;
45 }

View Code

这一题= =没有想出状态,没有想出方程= =全程看题解===还看了3天--55555

第一天:读懂了题目==木有思路

第二天:继续不懂==

第三天:看题解= =懂一丢丢= =

大概一道题目,一时不会,放着慢慢来,每天看一看,可能就会好一些 加油加油---go---go---

转载于:https://www.cnblogs.com/wuyuewoniu/p/4296980.html

HDU 1158 Employment Planning【DP】相关推荐

  1. 【DP】【期望】$P1850$换教室

    [DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...

  2. Bailian2760 数字三角形【DP】

    2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...

  3. NUC1131 Triangle【DP】

    Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...

  4. LeetCode:完全平方数【279】【DP】

    LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...

  5. 【DP】序列 题解

    [DP]序列 题解 序列 题目 一个长度为kkk的整数序列bbb 1,bbb 2,-,bkbkbk(1≤bbb 1≤bbb 2≤-≤bkbkbk≤NNN)称为"好序列"当且仅当后一 ...

  6. poj 2411 Mondriaan#39;s Dream 【dp】

    题目:poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案. 分析:这是一个比較经典的题目.网上各种牛B写法一大堆. ...

  7. BestCoder冠军赛 - 1005 Game 【DP】

    [题意] 给出一个set,set中有几个数. 现在给出n个人,环成一圈搞约瑟夫... 开始时从第1号报数,每次从set中随机选出一个数s,等报数到s后,报s的人出圈,其他人继续报数. 最后只剩1人时, ...

  8. 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...

    1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...

  9. zzuliOJ 1894: 985的方格难题 【dp】

    1894: 985的方格难题 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 369  Solved: 75 Description 985走入了一个n ...

最新文章

  1. AS3.0编程 So本地数据存储(“超级cookies”)--AS3:Local SharedObject
  2. IDEA 13 tomcat 进行远程调试
  3. 局域网中架设Win 2003终端服务器
  4. [我的1024开源程序]100元写的软件工程和VB试题
  5. Redis分布式缓存 教程以及DEMO
  6. 解读年度数据库PostgreSQL:如何巧妙地实现缓冲区管理器
  7. JPA-save()方法会将字段更新为null的解决方法
  8. Centos6.6安装Nginx
  9. 数据结构区间问题总结
  10. STM32最小系统下载程序方法
  11. 电力网络安全监测装置_10月 长沙 电力监控系统安全防护技术研修班
  12. 虚幻浏览器插件 播放视频
  13. 研发团队管理实践总结
  14. Android性能优化系列-监听View inflate周期并动态替换
  15. python学习之——综合小游戏
  16. Oracle的布莱恩·格茨(Brian Goetz)展望Lambdas的未来
  17. 量子计算机epr,量子计算术语表 - Azure Quantum | Microsoft Docs
  18. 计算机待机原理,电脑待机原理和开机原理
  19. 在家进行硬件升级:入侵Nintendo Joy-Con控制器
  20. MKS上游和下游集成式压力控制器的技术分析及其替代解决方案

热门文章

  1. 层层深入探究网络连接丢包之谜
  2. Ansible(五)远程创建用户并对密码进行加密设置
  3. 微信昵称上标电话号码,实用的新玩法
  4. CentOS 7 安装Docker
  5. 印尼商品期货交易监管局考虑对加密货币交易征税
  6. 韩国Hana银行将建立试点验证CBDC技术
  7. 区块链网络安全平台HAPI获Genesis Block Ventures投资
  8. Compound供应量突破70亿美元
  9. 末日博士:比特币不应出现在散户或机构投资者的投资组合中
  10. SAP License:SAP入门教材思考