当前位置: 首页 > news >正文

HDU_1158 Employment Planning(DP)

  又是一道纠结的dp题,做dp快做的崩溃了。。。

 状态表示:    

 Dp[i][j]为前i个月的留j个人的最优解;Num[i]<=j<=Max{Num[i]};
                j
>Max{Num[i]}之后无意义,无谓的浪费 记Max_n=Max{Num[i]};
    Dp[i
-1]中的每一项都可能影响到Dp[i],即使Num[i-1]<<Num[i]
    所以利用Dp[i
-1]中的所有项去求Dp[i];
    对于Num[i]
<=k<=Max_n,   

 当k<j时, 招聘;  当k>j时, 解雇  然后求出最小值
    Dp[i][j]
=min{Dp[i-1][k…Max_n]+(招聘,解雇,工资);   


代码:

#include <iostream>
#include
<cstdio>
#include
<cstring>

using namespace std;

const int N = 10000;
const int inf = 0xfffffff;

int mon[13];
int dp[13][N];

int main()
{
//freopen("data.in", "r", stdin);

int m, i, j, k;
while(scanf("%d", &m), m)
{
int hire, fire, salary, max, min, cost;

memset(dp,
0, sizeof(dp));
memset(mon,
0, sizeof(mon));

scanf(
"%d%d%d", &hire, &salary, &fire);
max
= -inf;

for(i = 1; i <= m; i++)
{
scanf(
"%d", mon + i);
max
= max > mon[i] ? max : mon[i];
}

for(i = mon[1]; i <= max; i++)
dp[
1][i] = (hire+salary) * i;

for(i = 2; i <= m; i++)
{
for(j = mon[i]; j <= max; j++)
{
min
= inf;
for(k = mon[i-1]; k <= max; k++)
{
if(k <= j)
cost
= (j-k)*hire + j*salary + dp[i-1][k];
else
cost
= (k-j)*fire + j*salary + dp[i-1][k];
if(min > cost)
min
= cost;
}
//printf("%d\n", min);
dp[i][j] = min;
}
}

min
= inf;
for(i = mon[m]; i <= max; i++)
if(min > dp[m][i])
min
= dp[m][i];
printf(
"%d\n", min);
}
return 0;
}


相关文章:

  • 如何解决文件夹不能删除的情况
  • MPLS 标签分发详解
  • oracle 函数WMSYS.WM_CONCAT()的用法(让查询结果行转列)
  • 我的第一篇博客 Java数据流_1
  • 窗体点击,空白处隐藏(stopPropagation)
  • .NET中的十进制浮点类型,徐汇区网站设计
  • 一些优秀软件收藏
  • 瑞星推出杀毒新品 预掀31.5元抢购热潮
  • Ubuntu快捷键
  • Cisco IOU 模拟器测试感受
  • [转]HTTP 头部详细解释
  • 阿里云为何成众矢之的?
  • 我在富士康挨踢了七年(一.初进富士康)
  • SQL Azure 服务器端架构
  • 计算机经典图书样章免费下载【持续更新中……】
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • angular学习第一篇-----环境搭建
  • HTML5新特性总结
  • uni-app项目数字滚动
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 技术发展面试
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 手写双向链表LinkedList的几个常用功能
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信小程序开发问题汇总
  • 详解移动APP与web APP的区别
  • 找一份好的前端工作,起点很重要
  • 自制字幕遮挡器
  • k8s使用glusterfs实现动态持久化存储
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #etcd#安装时出错
  • #HarmonyOS:基础语法
  • #微信小程序(布局、渲染层基础知识)
  • (二)Linux——Linux常用指令
  • (二十四)Flask之flask-session组件
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)setTimeout 和 setInterval 的区别
  • **CI中自动类加载的用法总结
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net 后台导出excel ,word
  • .NET 设计一套高性能的弱事件机制
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET关于 跳过SSL中遇到的问题
  • .NET中使用Protobuffer 实现序列化和反序列化
  • @javax.ws.rs Webservice注解
  • @Valid和@NotNull字段校验使用
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [1] 平面(Plane)图形的生成算法