题意:给你一个项目,需要几个月来完成买,同时也给你每个月最少需要的工人数。并且告诉你hiring,firing每个工人的钱数,以及每个月应付每个工人的工资。求项目完成时最小花费。

这是个简单dp,思路就是枚举一下上一个月和本月的工人数,写个状态转移方程即可。

#include<stdio.h>
#include<string.h>
#include<queue>
#include<iostream>
#define MAX 6000
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;int s, h, f;
int num[MAX];
int mon;
int dp[MAX][13];
int max(int a, int b) {return (a > b) ? a : b;
}int min(int a, int b) {return (a < b) ? a : b;
}
int main(void) {int maxx = 0;int ans = 0;while (~scanf("%d", &mon) && mon) {memset(dp, INF, sizeof(dp));ans = INF;scanf("%d%d%d", &h, &s, &f);for (int i = 1; i <= mon; i++) {scanf("%d", &num[i]);maxx = max(maxx, num[i]);}if (mon == 1) {ans = num[mon] * (h + s);printf("%d\n", ans);}else {for (int i = num[1]; i <= maxx; i++) {dp[i][1] = i * (h + s);}for (int i = 2; i <= mon; i++) {for (int j = num[i]; j <= maxx; j++) {for (int k = num[i - 1]; k <= maxx; k++) {if (j == k)dp[j][i] = min(dp[j][i - 1] + j * s, dp[j][i]);else if (j > k) {dp[j][i] = min(dp[k][i - 1] + (j - k)*(h + s) + k * s, dp[j][i]);}else {dp[j][i] = min(dp[k][i - 1] + f * (k - j) + s * j, dp[j][i]);}}}}for (int i = num[mon]; i <= maxx; i++) {ans = min(ans, dp[i][mon]);}printf("%d\n", ans);}}return 0;}

转载于:https://www.cnblogs.com/tennant/p/8986416.html

HDU 1158【简单dp】相关推荐

  1. hdu 5464(简单dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5464 解题思路: 由于p很小,而ai很大,所以先把ai%p,由于ai可能有负数,所以ai=(ai%p+ ...

  2. hdu 1208(简单dp)

    题意:从[1,1]出发到[n,n],每次到达的格子都要按照格子里的数字走.问可以走到终点的数量是多少. 解题思路:简单的递推就可以了... #include<iostream> #incl ...

  3. hdu 1723(简单dp)

    题意:从第1个人把信传到第n个人,每个人最多往后传m个人,问传到第n个人有多少种方案. 解题思路:水题,dp[i]表示传到第i个人有多少种方案,dp[i] += dp[k], i-m <= k ...

  4. HDU 5375 Gray code (简单dp)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Ot ...

  5. hdu 2881(简单dp)

     题意:n*n的矩阵,里面有m个格子是有任务要去完成的,t,x,y表示要在第t秒到达(x,y)的格子完成任务,问你最多可以完成多少 解题思路:简单dp,将时间排个序后就是LIS #include< ...

  6. hdu 3016 Man Down(简单线段树简单DP)

    Man Down Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  7. 4.15 每周作业 —— 简单DP

    免费馅饼 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissi ...

  8. Codeforces 41D Pawn 简单dp

    题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...

  9. HDU 1564 简单博弈 水

    n*n棋盘,初始左上角有一个石头,每次放只能在相邻的四个位置之一,不能操作者输. 如果以初始石头编号为1作为后手,那么对于每次先手胜的情况其最后一步的四周的编号必定是奇数,且此时编号为偶数,而对于一个 ...

最新文章

  1. 【c语言】蓝桥杯算法提高 约数个数
  2. python哲学内容 多行胜于单行_Python3基础 __doc__ 单行与多行函数文档
  3. 基于消息队列 RocketMQ 的大型分布式应用上云实践
  4. c++ - 在终端中,cout不显示任何内容
  5. python将一个文件夹下图片到另外一个文件夹下
  6. 数据科学家最常用的十种算法和方法
  7. 信息展示类图表设计指南:10个必须遵循的步骤
  8. 校内胡策 T9270 mjt树
  9. 机器学习开篇之机器学习的分类
  10. 九死一生!阿里投资的Bigbasket,靠什么做到印度生鲜电商老大?
  11. bootstrap可视化布局(免费,自定义,方便下载)网页自定义,后台、前端页面自定义
  12. PCB设计基础及技巧
  13. 傅里叶逆变换程序matlab,按时间抽取基2-快速傅里叶逆变换算法_MATLAB代码
  14. 前端页面复制粘贴插件Clipboard的使用
  15. mysql笔试题一:查询where having 以及统计函数的使用
  16. matlab 工业相机 曝光时间_工业相机的曝光、曝光时间、快门、增益
  17. 服务器安装360文档卫士,360文档卫士的安装使用方法
  18. 步进电机正反转实验_只用一个接触器实现三相电机正反转
  19. webrtc入门:8.coturn流程
  20. 腾讯技术分享:微服务接口设计原则

热门文章

  1. iOS开发 IAP苹果内购
  2. 学以致用 知行合一 ——《产品管理与研发项目管理》课程有感
  3. OUTLOOK邮箱设置
  4. TypeError: 'str' object is not callable
  5. 蓝桥杯 ADV-154 算法提高 质数的后代
  6. 蓝桥杯 ADV-233 算法提高 队列操作
  7. 蓝桥杯 ADV-166 算法提高 聪明的美食家 java版
  8. L1-012. 计算指数-PAT团体程序设计天梯赛GPLT
  9. MESSAGE: [unixODBC][MySQL][ODBC 3.51 Driver]Can't connect to local MySQL server through socket '/tmp
  10. 数组的filter()方法