博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU_1158 Employment Planning(DP)
阅读量:6112 次
发布时间:2019-06-21

本文共 1552 字,大约阅读时间需要 5 分钟。

  又是一道纠结的dp题,做dp快做的崩溃了。。。

 状态表示:    

 Dp[i][j]为前i个月的留j个人的最优解;Num[i]<=j<=Max{Num[i]};

                j>Max{Num[i]}之后无意义,无谓的浪费 记Max_n=Max{Num[i]};
    Dp[i
-1]中的每一项都可能影响到Dp[i],即使Num[i-1]<<Num[i]
    所以利用Dp[i
-1]中的所有项去求Dp[i];
    对于Num[i]
<=k<=Max_n,   

 当k<j时, 招聘;  当k>j时, 解雇  然后求出最小值

    Dp[i][j]=min{Dp[i-1][k…Max_n]+(招聘,解雇,工资);   

代码:

#include 
#include
#include
using namespace std; const int N = 10000; const int inf = 0xfffffff; int mon[13]; int dp[13][N]; int main() {
//freopen("data.in", "r", stdin); int m, i, j, k; while(scanf("%d", &m), m) {
int hire, fire, salary, max, min, cost; memset(dp, 0, sizeof(dp)); memset(mon, 0, sizeof(mon)); scanf("%d%d%d", &hire, &salary, &fire); max = -inf; for(i = 1; i <= m; i++) {
scanf("%d", mon + i); max = max > mon[i] ? max : mon[i]; } for(i = mon[1]; i <= max; i++) dp[1][i] = (hire+salary) * i; for(i = 2; i <= m; i++) {
for(j = mon[i]; j <= max; j++) {
min = inf; for(k = mon[i-1]; k <= max; k++) {
if(k <= j) cost = (j-k)*hire + j*salary + dp[i-1][k]; else cost = (k-j)*fire + j*salary + dp[i-1][k]; if(min > cost) min = cost; } //printf("%d\n", min); dp[i][j] = min; } } min = inf; for(i = mon[m]; i <= max; i++) if(min > dp[m][i]) min = dp[m][i]; printf("%d\n", min); } return 0; }

转载地址:http://uacka.baihongyu.com/

你可能感兴趣的文章
我只是轻奢 40万内入门豪车最高让利7万!-搜狐汽车
查看>>
曲演杂坛--隐式转换
查看>>
远程桌面连接技巧--与主机拷贝文本及拷贝文件(转)
查看>>
MVC中下拉框显示枚举项
查看>>
Linux基础精华
查看>>
SqlServer2008第一次安装后连接问题
查看>>
cocos2d-x Schedule详解
查看>>
sdut 2163:Identifiers(第二届山东省省赛原题,水题)
查看>>
C++ 容器:顺序性容器、关联式容器和容器适配器
查看>>
mysql 常用语句集
查看>>
Atitit.软件开发提升稳定性总结
查看>>
lftp查看文件时间与登录服务查看文件时间相差8小时
查看>>
[leetcode]Next Permutation @ Python
查看>>
JAVA(2)——JDBC
查看>>
php heredoc 与 nowdoc
查看>>
DBA_Oracle DBA常用表汇总(概念)
查看>>
第30周二
查看>>
数学类杂志SCI2013-2014影响因子
查看>>
实用的树形菜单控件tree
查看>>
最近公共祖先(lca)
查看>>