题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1158
解题思路就不多说,动态规划。
值得提及的是题目没有给出数据范围,水过的都默认工人数目不超过1000。
我给出了n*n*n的算法,针对工人数目任意的情况。
首先,可以判断的是,每次决策之后的工人数量,肯定和从当前月开始的之后某个月的工人数量相同
如要hire,则当hire足够;如要fire,则当fire到底;
如此就可以应离散化的方法了,n*n*n。转移为o(n)
#include<algorithm>
#include<iostream>
#include<cmath>
#include<stdio.h>
#include<stdlib.h>
#include<cstring>
using namespace std; #define N 15
int dp[N][N];
int hire,sala,fire;
int num[N];
int disf[N];
int pos[N];
int main()
{
int i,j,k,n,tmp;
while(~scanf("%d",&n) && n)
{
scanf("%d%d%d",&hire,&sala,&fire);
for(i=0;i<n;disf[i]=num[i],i++)scanf("%d",&num[i]);
sort(disf,disf+n);
for(i=0;i<n;pos[i]=j,i++)for(j=0;j<n && num[i]!=disf[j];j++);
memset(dp,-1,sizeof(dp));
dp[0][pos[0]]=(hire+sala)*num[0]; for(i=1;i<n;i++)
for(k=pos[i];k<n;k++){ for(j=pos[i-1];j<n;j++)
if(dp[i-1][j]!=-1){
if(j<k)tmp=dp[i-1][j]+(disf[k]-disf[j])*hire+disf[k]*sala;
else tmp=dp[i-1][j]+(disf[j]-disf[k])*fire+disf[k]*sala; if(dp[i][k]==-1)dp[i][k]=tmp;
else dp[i][k]=min(dp[i][k],tmp);
} }
/*
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d ",dp[i][j]);
printf("\n");
}
*/
int minp=dp[n-1][pos[n-1]];
for(j=pos[n-1]+1;j<n;j++)
minp=min(minp,dp[n-1][j]);
printf("%d\n",minp);
}
return 0;
}
/*
3
4 5 6
10 9 11 */

hdu 1158-Employment Planning,n*n*n的更多相关文章

  1. HDU 1158 Employment Planning (DP)

    题目链接 题意 : n个月,每个月都至少需要mon[i]个人来工作,然后每次雇佣工人需要给一部分钱,每个人每个月还要给工资,如果解雇人还需要给一笔钱,所以问你主管应该怎么雇佣或解雇工人才能使总花销最小 ...

  2. Hdu 1158 Employment Planning(DP)

    Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1158 一道dp题,或许是我对dp的理解的还不够,看了题解才做出来,要加油了. 只能先上代码了 ...

  3. HDU 1158 Employment Planning

    又一次看题解. 万事开头难,我想DP也是这样的. 呵呵,不过还是有进步的. 比如说我一开始也是打算用dp[i][j]表示第i个月份雇j个员工的最低花费,不过后面的思路就完全错了.. 不过这里还有个问题 ...

  4. HDU 1158 Employment Planning【DP】

    题意:给出n个月,雇佣一个人所需的钱hire,一个人工作一个月所需要的钱salary,解雇一个人所需要的钱fire,再给出这n个月每月1至少有num[i]个人完成工作,问完成整个工作所花费的最少的钱是 ...

  5. hdu 1158 Employment Planning(DP)

    题意: 有一个工程需要N个月才能完成.(n<=12) 给出雇佣一个工人的费用.每个工人每个月的工资.解雇一个工人的费用. 然后给出N个月所需的最少工人人数. 问完成这个项目最少需要花多少钱. 思 ...

  6. 【HDOJ】1158 Employment Planning

    简单DP. #include <cstdio> #include <cstring> #include <cstdlib> #include <climits ...

  7. HDU 1158(非常好的锻炼DP思维的题目,非常经典)

    题目链接: acm.hdu.edu.cn/showproblem.php?pid=1158 Employment Planning Time Limit: 2000/1000 MS (Java/Oth ...

  8. hdu 1158 dp Employment Planning

    Employment Planning Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  9. Employment Planning DP

    Employment Planning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  10. 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 ...

随机推荐

  1. 解决centOS7的IP为127.0.0.1,无法用Xshll链接问题

    对于linux不熟悉的我, 安装完centOS7后好多坑,走一步卡一步,记得之前安装其他版本没这么多事.安装完后用ifconfig查看IP,竟然是127.0.0.1,这我就不知道怎么用Xshell链接 ...

  2. Python并发编程-SocketServer多线程版

    #server.py import socket from threading import Thread def chat(conn): conn.send(b'hello') msg = conn ...

  3. Xamarin Android权限请求

    Xamarin Android权限请求   Android权限规定了App是否可以访问特定的资源,如网络.电话和短信.在原有API 6.0之前,App在安全的时候,会请求一次权限.一旦安装后,App就 ...

  4. 2017/11/3 Leetcode 日记

    2017/11/3 Leetcode 日记 654. Maximum Binary Tree Given an integer array with no duplicates. A maximum ...

  5. Python中__new__()方法的使用和实例化

    new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决 ...

  6. 小数据池,bytes

    '''python2 python3 '''#python2#print() print 'abc'#range() xrange() 生成器# raw_input() #python3#print( ...

  7. 【UOJ #204】【APIO 2016】Boat

    http://uoj.ac/problem/204 肯定要离散化的,先离散化出\(O(n)\)个取值区间. 设\(f(i,j)\)表示第\(i\)所学校派出的划艇数量在\(j\)区间中. \(f(i, ...

  8. 【BIT套主席树】COGS257-动态排名系统

    题意同BZOJ1901,多组数据,数据范围也不一样.重新写一遍复习一下. #include<iostream> #include<cstdio> #include<cst ...

  9. bzoj2938 病毒

    Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...

  10. SCOJ 4423: Necklace polya

    4423: Necklace 题目连接: http://acm.scu.edu.cn/soj/problem.action?id=4423 Description baihacker bought a ...