题意:

第一行项目数;

第二行每个工人的Hire
Salary Fire money

第三行每个项目需要的人的数量;

工人在hire/fire的时候要付出额外的钱,如果已经hire了还没有fire就一直会付salary求一个最小开支。

思路:

这题因为感觉就是DP,所以也没想贪心。。

H:hire的钱

S:salary

F:firep[]代表项目人数;

首先可以看出:

①:p[i-1]<p[i]
:要再雇几个人,前一状态+H*(p[i]-p[i-1])+S*p[i]

②:p[i-1]==p[i]
:直接就是 前一状态+S*p[i]

③:p[i-1]>p[i]
:要先去几个人,前一状态+F*(p[i]-p[i-1])+S*p[i]

用dp[i][j]代表前i个项目的j个人的消费;

从前一状态到后一状态的改变:我们可以想到最多最多雇的人不会超过期间最多的人;

所以对于每次状态的更新都要更新到最多人次,而每次人次的下界,并不是最小,因为对于第i个项目你最小要拿p[i]个人,所以每次状态的更新是从p[i]到会出现的最多人次;

然后转移过来的值,就是在之前的状态经过转换后的一个最小值,而前一状态有:dp[i-1][j],p[i-1]<=j<=tmax(某项目最多人)

那么初始化,状态转移就不难了~

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=12+10;
const int INF=0x3f3f3f3f; int p[N];
int dp[N][1010];
int H;
int S;
int F;
int n; int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
scanf("%d%d%d",&H,&S,&F);
scanf("%d",&p[1]);
int tmax=p[1];
for(int i=2;i<=n;i++)
{
scanf("%d",&p[i]);
tmax=max(p[i],tmax);
}
memset(dp,0,sizeof(dp)); for(int i=p[1];i<=tmax;i++)
dp[1][i]=i*S+i*H; int temp;
for(int i=2;i<=n;i++)
{
for(int j=p[i];j<=tmax;j++)//对于第i次的更新;
{
temp=INF;
for(int k=p[i-1];k<=tmax;k++)//从前一状态拿一个最小值;
if(temp>dp[i-1][k]+(j>=k?(j*S+(j-k)*H):(j*S+(k-j)*F)))
temp=dp[i-1][k]+(j>=k?(j*S+(j-k)*H):(j*S+(k-j)*F));
dp[i][j]=temp;
}
}
int ans=dp[n][p[n]];
for(int i=p[n]+1;i<=tmax;i++)
ans=min(ans,dp[n][i]);
printf("%d\n",ans);
}
return 0;
}

hdu1158【DP】的更多相关文章

  1. Kattis - honey【DP】

    Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...

  2. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...

  3. HDOJ 1501 Zipper 【DP】【DFS+剪枝】

    HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  4. HDOJ 1257 最少拦截系统 【DP】

    HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  5. HDOJ 1159 Common Subsequence【DP】

    HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  6. HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】

    HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...

  7. POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】

    POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...

  8. HackerRank - common-child【DP】

    HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...

  9. LeetCode:零钱兑换【322】【DP】

    LeetCode:零钱兑换[322][DP] 题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成 ...

随机推荐

  1. 计算机鼻祖-Donald Knuth(高纳德) 的传奇

    李开复说,练内功,不要仅仅花功夫学习各种流行的编程语言和工具,以及一些公司招聘广告上要求的科目.要把数据结构.算法.数据库.操作系统原理.计算机体系结构.计算机网络,离散数学等基础课程学好.最好还是试 ...

  2. UML类图组成

    本文转载至 http://blog.csdn.net/fengsh998/article/details/8105666     UML类图的相关知识,UML类图(Classdiagram)是最常用的 ...

  3. wince c# 创建桌面快捷方式 自动启动 只运行一次 全屏显示

    using System; using System.Linq; using System.Collections.Generic; using System.Text; using System.R ...

  4. css zoom 属性

    oom这个属性是ie专有属性,除了设置或者检索对象的缩放比例之外,它还有可以触发ie的haslayout属性,清除浮动,清除margin重叠等作用. 不过值得注意的一点就是火狐浏览器不支持zoom属性 ...

  5. mongodb学习之:文档操作

    在上一章中有讲到文档的插入操作是用insert的方法.如果该集合不在该数据库中,mongodb会自动创建该集合并插入文档 用find的方法可以查找所有的集合数据 > db.maple.find( ...

  6. HLS切片机

    参考: 1,linux下搭建生成HLS所需的.ts和.m3u8文件http://www.cnblogs.com/mystory/archive/2013/04/07/3006200.html2,iPh ...

  7. 使用c函数库的两个函数strtok, strncpy遇到的问题记录

    1. strtok 问题背景: 解析形如 “1,2,3,4,5”字符串到整数数组 (1)计算个数 char* delim = ","; int count = 0; int *nu ...

  8. LightOJ1234 Harmonic Number —— 分区打表

    题目链接:https://vjudge.net/problem/LightOJ-1234 1234 - Harmonic Number    PDF (English) Statistics Foru ...

  9. BestCoder Round #92 1001 Skip the Class —— 字典树 or map容器

    题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=748&pid=1001 题解: 1.trie树 关 ...

  10. 关于Spring Security的笔记

    1.web.xml配置文件 加载Spring Security,将DelegatingFilterProxy配置在DispatcherServlet之前. <filter> <fil ...