O - Employment Planning HDU - 1158
题目大意:
第一行一个n,表示共n个月份,然后第二行分别表示一个工人的聘请工资,月薪水,解雇工资。第三行是n个月每个月需要的工人的最少数目。然后求最少花费
题解:
dp[i][j] 表示第i个月聘请j个人需要的最少花费。
状态是怎么转移的呢?
当第i-1个月聘请k个人时。
如果k<j。需要聘请新人 dp[i][j]=dp[i-1][k]+hire*(j-k)+salary*j;
否则 。。需要解雇人员 dp[i][j]=dp[i-1][k]+fire*(k-j)+salart*j;
注意:最后一个月聘请的人不需要解雇。。。。。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1E3+;
const ll INF=1e18+;
ll dp[N][N];
ll arr[N];
int main(){
ll n;
while(cin>>n,n){
ll hire,salary,fire; cin>>hire>>salary>>fire;
ll maxx=; for(ll i=;i<=n;i++){
cin>>arr[i];
maxx=max(arr[i],maxx);
} for(ll i=;i<=n;i++)
for(ll j=;j<=maxx;j++)
dp[i][j]=INF; for(ll i=arr[];i<=maxx;i++) dp[][i]=hire*i+salary*i; for(ll i=;i<=n;i++){
for(ll j=arr[i];j<=maxx;j++){
for(ll k=arr[i-];k<=maxx;k++){
if(j>k) dp[i][j]=min(dp[i][j],dp[i-][k]+hire*(j-k)+salary*j);
else dp[i][j]=min(dp[i][j],dp[i-][k]+fire*(k-j)+salary*j);
}
}
} ll ans=INF; for(ll i=arr[n];i<=maxx;i++) ans=min(ans,dp[n][i]); cout<<ans<<endl;
}
return ;
}
O - Employment Planning HDU - 1158的更多相关文章
- hdu 1158 dp Employment Planning
Employment Planning Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- HDU 1158 Employment Planning (DP)
题目链接 题意 : n个月,每个月都至少需要mon[i]个人来工作,然后每次雇佣工人需要给一部分钱,每个人每个月还要给工资,如果解雇人还需要给一笔钱,所以问你主管应该怎么雇佣或解雇工人才能使总花销最小 ...
- HDU 1158(非常好的锻炼DP思维的题目,非常经典)
题目链接: acm.hdu.edu.cn/showproblem.php?pid=1158 Employment Planning Time Limit: 2000/1000 MS (Java/Oth ...
- Employment Planning[HDU1158]
Employment Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Employment Planning DP
Employment Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu1158 Employment Planning 2016-09-11 15:14 33人阅读 评论(0) 收藏
Employment Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu1158 Employment Planning(dp)
题目传送门 Employment Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- Employment Planning
Employment Planning 有n个月,每个月有一个最小需要的工人数量\(a_i\),雇佣一个工人的费用为\(h\),开除一个工人的费用为\(f\),薪水为\(s\),询问满足这n个月正常工 ...
- HDU1158:Employment Planning(暴力DP)
Employment Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
随机推荐
- 题解 P4344 【[SHOI2015]脑洞治疗仪】
前言 这道题目呢,看上去很难,实际上我们可以用线段树解决这道题目. 正文 我们维护 sum.len.tag.lmax.rmax.ans. sum 就是这段区间非脑洞的个数 len 就是这段区间的长度 ...
- 数学-概率-New 21 Game
2020-02-10 13:24:26 问题描述: 问题求解: 第一次看到这个题目的时候想到的是之前做过的一条概率题,就是那个国际象棋,那条题目的做法是使用dp去对所有留在棋盘的种类进行计数,然后除以 ...
- Codeforces Add on a Tree
Add on a Tree time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 解决 Mac Android Studio Gradle Sync 慢的问题
1.启动Android Studio 2.从项目的 gradle/wrapper/gradle-wrapper.properties 目录中找到 distributionUrl 这个字段,查看后面对应 ...
- elasticsearch和kibana安装后,外网无法访问
问题描述: 现在解压elasticsearch之后,启动,通过http://localhost:9200可以访问的到,但是http://ip:9200访问不到 解决方法: 修改elasticsearc ...
- Python中保留两位小数的几种方法
https://blog.csdn.net/Jerry_1126/article/details/85009810 保留两位小数,并做四舍五入处理方法一: 使用字符串格式化>>> a ...
- 强化学习之七:Visualizing an Agent’s Thoughts and Actions
本文是对Arthur Juliani在Medium平台发布的强化学习系列教程的个人中文翻译,该翻译是基于个人分享知识的目的进行的,欢迎交流!(This article is my personal t ...
- Prism 源码解读4-ViewModel注入
介绍 介绍一个Prism的MVVM实现,主要介绍Prism如何在WPF上进行的一些封装,以实现MVVM.MVVM到底是什么呢?看一下这一幅经典的图 以前没有ViewModel这个概念,就是将Model ...
- R语言基本操作
is.na and is.element is.na can use which, it finds specific rows, is.element can't, it is designed t ...
- 【译】Java SE 14 Hotspot 虚拟机垃圾回收调优指南
原文链接:HotSpot Virtual Machine Garbage Collection Tuning Guide,基于Java SE 14. 本文主要包括以下内容: 优化目标与策略(Ergon ...