【a601】雇佣计划
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】雇佣计划的更多相关文章
- [LOJ#2732] 「JOISC 2016 Day 2」雇佣计划
参考博文 (不过个人感觉我讲的稍微更清楚一点) 题目就是让我们求图中满足数值大于等于B的连通块数量 然后我们可以尝试转换为求连通块两端所产生的“谷”的数量,显然一个连通块对谷可以贡献2的答案,最终答案 ...
- BZOJ2039 [2009国家集训队]employ人员雇佣
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=2039 鉴于一开始看题如果不仔细是看不懂题目的,还是说一下题目大意 [题目大意]:给定n个人 ...
- 【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划
发个通知,过段时间学习计划相关的东西就出来了,上次写了篇指引文章后有些好奇心颇重的人跟我说:“发现最近群知识库和技能库更新的频率有点大,这是要放大招的节奏啊!” 很多想学习却不知道如何规划的人想要一个 ...
- SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)
前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...
- ORACLE从共享池删除指定SQL的执行计划
Oracle 11g在DBMS_SHARED_POOL包中引入了一个名为PURGE的新存储过程,用于从对象库缓存中刷新特定对象,例如游标,包,序列,触发器等.也就是说可以删除.清理特定SQL的执行计划 ...
- 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器
企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...
- MSSQLSERVER执行计划详解
序言 本篇主要目的有二: 1.看懂t-sql的执行计划,明白执行计划中的一些常识. 2.能够分析执行计划,找到优化sql性能的思路或方案. 如果你对sql查询优化的理解或常识不是很深入,那么推荐几骗博 ...
- SQL Server-聚焦使用索引和查询执行计划(五)
前言 上一篇我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解,Always to review the ...
- SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划
1.使用sql_trace跟踪执行计划 1.1 当前session跟踪: alter session set sql_trace = true; //开始sql_trace alter session ...
随机推荐
- HTML基础第十一讲---背景标志
转自:https://i.cnblogs.com/posts?categoryid=1121494 您是否老觉得网页「空空的」,没错!一个可能是我们还没有很多内容,另一个可能则是我们还没有设定网页背景 ...
- WP8日历(含农历)APP
WP8日历(含农历)APP WP8日历(含农历)APP UI XAML(部分) <phone:PhoneApplicationPage xmlns:CustomControl="clr ...
- JS错误记录 - 记录上次登陆的用户名
<script> //步骤 1.submit => 用户名存进cookie 2. onload => 从cookie读取用户名 window.onload = function ...
- loadrunner--log的使用总结
1.log的设置方式.在 runtime setting中可以设置log的生成方式:默认的log方式:Enable logging选中,log option是Send messages only wh ...
- keytool用法总结
一.keytool的概念 keytool 是个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务.在 ...
- Android 中AIDL的使用与理解
AIDL的使用: 最常见的aidl的使用就是Service的跨进程通信了,那么我们就写一个Activity和Service的跨进程通信吧. 首先,我们就在AS里面新建一个aidl文件(ps:现在AS建 ...
- js面向对象的选项卡
前言: 选项卡在项目中经常用到,也经常写,今天在github突然看到一个面向对象的写法,值得收藏和学习. 本文内容摘自github上的 helloforrestworld/javascriptLab ...
- POJ 2752 Seek the Name, Seek the Fame (KMP)
传送门 http://poj.org/problem?id=2752 题目大意:求既是前缀又是后缀的前缀的可能的长度.. 同样是KMP,和 HDU 2594 Simpsons' Hidden Tale ...
- php用两个栈来实现队列
php用两个栈来实现队列 一.总结 我主要的问题是不知道的是题目描述,题目和贵的代码之间的关系,以及返回值 思路:A栈做入队操作,B栈做出队操作,入队的时候元素直接入A,出队的时候判断B栈是否为空,如 ...
- [Vue] Preload Data using Promises with Vue.js and Nuxt.js
Nuxt.js allows you to return a Promise from your data function so that you can asynchronously resolv ...