動態規劃 僱傭員工(hdu1158)

2021-07-24 18:25:59 字數 894 閱讀 1491

題目描述:

有一家公司要完成乙個課題,該課題分為n個月完成。現在知道每個月至少需要多少人手才能完成這個階段的任務。假如說我們要聘請乙個員工,那麼我們就要有一定的花費(第二行的第乙個數字);假如說我們解雇乙個員工,那麼我們也有一定的花費(第二行的第三個數字)。當然員工也是要拿工資的,每個月拿一定量的工資(假如說某個員工不幹活也是拿工資的,第二行第二個數字),問你完成這個課題,最小需要花費多少錢?

樣例解釋:

3  //乙個課題分三個月解決

4 5 6  //分別為聘請乙個員工的花費、乙個員工的工資、乙個員工被解雇的花費

10 9 11 //第乙個月至少需要10個人,第二個月至少需要9個人,第三個月至少需要11個人

輸出:199

第乙個月聘請10個員工,花費:10*4+10*5(工資+聘請的費用)=90

第二個月不聘請員工(當然我們也可以解雇乙個員工,當然也可以完成該階段的任務,但是不聘請員工的做法才能達到最優解,具體你可以自己再紙上算算),花費:10*5=50(工資)

第三個月聘請乙個員工,花費:10*5+4+5=59(10個人的工資+新聘請員工的工資+招聘費用)

那麼總花費就是:90+50+59=199 即為最優解。

解題思路:在某個月我們無法直接判斷究竟該僱傭多少員工,如測試資料,所以我們要用dp的思路,把每個月僱傭不同人數的最優解全部記錄下來

dp[i][j]表示對於第i個階段,保留j個人(要完成當月的任務)所需要的最少花費。j小於等於整個課題需要員工的最大額度

#include int fmax(int a,int b)

int fmin(int a,int b)

{ return aj)

v_nsumaschange=dp[i-1][k]+(k-j)*v_nfire+j*v_nkeep;

if(k

hdu2159 動態規劃

problem description 最近xhd正在玩一款叫做fate的遊戲,為了得到極品裝備,xhd在不停的殺怪做任務。久而久之xhd開始對殺怪產生的厭惡感,但又不得不通過殺怪來公升完這最後一級。現在的問題是,xhd昇掉最後一級還需n的經驗值,xhd還留有m的忍耐度,每殺乙個怪xhd會得到相應的...

hdu 1257 動態規劃

problem description 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的飛彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有...

hdu1978動態規劃

還算比較好理解的動態規劃 題意 這是乙個簡單的生存遊戲,你控制乙個機械人從乙個棋盤的起始點 1,1 走到棋盤的終點 n,m 遊戲的規則描述如下 1.機械人一開始在棋盤的起始點並有起始點所標有的能量。2.機械人只能向右或者向下走,並且每走一步消耗一單位能量。3.機械人不能在原地停留。4.當機械人選擇了...