Time Limit: 1 second

Memory Limit: 32 MB

【问题描述】

一位管理项目的经理想要确定每个月需要的工人,他知道每月所需的最少工人数。当他雇佣或解雇一个工人时,会有一些额外支出。一旦一个工人被雇佣,即使他不工作,他也将得到工资。这位经理知道雇佣一个工人的费用,解雇一个工人的费用和一个工人的工资。现他在考虑一个问题:为了把项目的费用控制在最低,他将每月雇佣或解雇多少个工人。

【输入格式】

共三行。第一行为月数n(不超过12)。第二行含雇佣一个工人的费用、一个工人的工资和解雇一个工人的费用(≤100)。第三行含n个数,分别表示每月最少需要的工人数(≤1000)。每个数据之间有一个空格隔开。

【输出格式】

仅一行,表示项目的最小总费用。

【输入样例】

3
4 5 6
10 9 11

【输出样例】

199

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=a601

【题意】

【题解】

/*
设f[i][j]表示第i个月有j个工人的最小花费;
memset(f,255,sizeof f);
f[1][mi[1]] = h*mi[1]+mi[1]*s;
rep1(i,1,n-1)
rep1(j,mi[i],1000)
if (f[i][j]!=-1)
{
if (j<=mi[i+1])
{
if (f[i+1][mi[i+1]]==-1)
f[i+1][mi[i+1]] = f[i][j]+(mi[i+1]-j)*h+mi[i+1]*s;
else
f[i+1][mi[i+1]] = min(f[i+1][mi[i+1]],f[i][j]+(mi[i+1]-j)*h+mi[i+1]*s);
}
else
{
//j>mi[i+1];
rep1(k,mi[i+1],j)
{
if (f[i+1][k] ==-1)
f[i+1][k] = f[i][j]+f*(j-k)+k*s;
else
f[i+1][k] = min(f[i+1][k],f[i][j]+f*(j-k)+k*s);
}
}
}
最后在f[n][mi[n]..1000]里面找答案;
*/

【完整代码】

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 15; int n,h,s,f;
int mi[N],dp[N][2000]; int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);
rei(h),rei(s),rei(f);
rep1(i,1,n)
rei(mi[i]);
memset(dp,255,sizeof dp);
dp[1][mi[1]] = h*mi[1]+mi[1]*s;
rep1(i,1,n-1)
rep1(j,mi[i],1000)
if (dp[i][j]!=-1)
{
if (j<=mi[i+1])
{
if (dp[i+1][mi[i+1]]==-1)
dp[i+1][mi[i+1]] = dp[i][j]+(mi[i+1]-j)*h+mi[i+1]*s;
else
dp[i+1][mi[i+1]] = min(dp[i+1][mi[i+1]],dp[i][j]+(mi[i+1]-j)*h+mi[i+1]*s);
}
else
{
//j>mi[i+1];
rep1(k,mi[i+1],j)
{
if (dp[i+1][k] ==-1)
dp[i+1][k] = dp[i][j]+f*(j-k)+k*s;
else
dp[i+1][k] = min(dp[i+1][k],dp[i][j]+f*(j-k)+k*s);
}
}
}
int ans = 0x3f3f3f3f;
rep1(i,mi[n],1000)
if (dp[n][i]!=-1)
ans = min(ans,dp[n][i]);
printf("%d\n",ans);
return 0;
}

【a601】雇佣计划的更多相关文章

  1. [LOJ#2732] 「JOISC 2016 Day 2」雇佣计划

    参考博文 (不过个人感觉我讲的稍微更清楚一点) 题目就是让我们求图中满足数值大于等于B的连通块数量 然后我们可以尝试转换为求连通块两端所产生的“谷”的数量,显然一个连通块对谷可以贡献2的答案,最终答案 ...

  2. BZOJ2039 [2009国家集训队]employ人员雇佣

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=2039 鉴于一开始看题如果不仔细是看不懂题目的,还是说一下题目大意 [题目大意]:给定n个人 ...

  3. 【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划

    发个通知,过段时间学习计划相关的东西就出来了,上次写了篇指引文章后有些好奇心颇重的人跟我说:“发现最近群知识库和技能库更新的频率有点大,这是要放大招的节奏啊!” 很多想学习却不知道如何规划的人想要一个 ...

  4. SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)

    前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...

  5. ORACLE从共享池删除指定SQL的执行计划

    Oracle 11g在DBMS_SHARED_POOL包中引入了一个名为PURGE的新存储过程,用于从对象库缓存中刷新特定对象,例如游标,包,序列,触发器等.也就是说可以删除.清理特定SQL的执行计划 ...

  6. 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器

    企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...

  7. MSSQLSERVER执行计划详解

    序言 本篇主要目的有二: 1.看懂t-sql的执行计划,明白执行计划中的一些常识. 2.能够分析执行计划,找到优化sql性能的思路或方案. 如果你对sql查询优化的理解或常识不是很深入,那么推荐几骗博 ...

  8. SQL Server-聚焦使用索引和查询执行计划(五)

    前言 上一篇我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解,Always to review the ...

  9. SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划

    1.使用sql_trace跟踪执行计划 1.1 当前session跟踪: alter session set sql_trace = true; //开始sql_trace alter session ...

随机推荐

  1. CSS3常用属性及用法

    1.transition: 过渡属性,可以替代flash和javascript的效果 兼容性:Internet Explorer 9 以及更早的版本,不支持 transition 属性. Chrome ...

  2. JAVA 水题

    纯粹是让我来掌握熟练度的. 1.金蝉素数 某古寺的一块石碑上依稀刻有一些神秘的自然数. 专家研究发现:这些数是由1,3,5,7,9 这5 个奇数字排列组成的5 位素数,且同时去掉它的最高位与最低位数字 ...

  3. postman带cookie进行请求

    接口地址: https://m.xxxx.com/api/front/activity/xs/session 打开postman的headers, 然后复制fiddler中接口的cookie,设置co ...

  4. jQuery的原理

    JQ的原理 jquery-1.xxx :专门为PC端诞生的类库,兼容所有的浏览器 jquery-2.xxx:当初是为了移动端而准备的,所以IE低版本浏览器一般不兼容,但是这个版本针对移动端的事件等操作 ...

  5. JS学习笔记 - fgm练习 - 鼠标移入/移出div样式改变

    思路: div的默认样式正常设置. 鼠标移入时,发生改变的样式有3个,即 边框颜色,div背景色,字体颜色. 把这三个css改变设置在一个类名下,再通过js给div动态 添加/去除这个类名,实现div ...

  6. GO语言学习(九)Go 语言运算符

    运算符用于在程序运行时执行数学或逻辑运算. Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 接下来让我们来详细看看各个运算符的介绍. 算术运算符 下表 ...

  7. [AngularJS] Interpolation fail in IE 11

    When you occured this problem, check few things: For the input field, use // Use ng-attr-placeholder ...

  8. [React] Close the menu component when click outside the menu

    Most of the time, your components respond to events that occur within the component tree by defining ...

  9. Android, IOS 史上最强多语言国际化,不仅第一次会尾随系统,并且会保存用户的语言设置

    劲爆消息,我提供源代码了.你能够先看完再下载.也能够先下载再看完, android源代码地址: https://github.com/hebiao6446/------Bluetooth-Androi ...

  10. C语言深度剖析-----函数与指针的分析

                          指针的本质 指针需要保证指向任意数据类型,所以指针变量都占用32位bit即4字节. PS:不同机器上,指针占用内存不一                   ...