工作計畫 題解

2022-05-21 18:18:10 字數 2005 閱讀 7063

mark 在無意中了解到了 elf 的身世。在和 james 商量過之後,好心的他們 打算送 elf 返回故鄉。然而,去往 gliese 的飛船票價高的驚人,他們暫時還付 不起這筆費用。經過一番考慮,mark 打算去額外做一些工作來獲得收入。 經過一番調查,mark 發現有 n 個工作可以做。做第 i 件工作所需要的時間為 di,同時也需要乙個能力值 ci 才可以去做,每件工作都可以在任意時間開 始,也可以做任意多次。所有的工作給付的報酬都是一致的。同時,有 s 個課 程可以參加,我們認為今天是第 0 天,第 i 個課程在第 mi 天開始,持續時間 為 li 天,課程結束之後能力值會變為 ai。現在 mark 的能力值為 1。mark 只 能做工作到第 t 天(因為那是飛船起飛的日子)。

輸入格式:

第一行包含三個空格分隔的整數 t,s,n。 之後 s 行,每行三個整數 m,l,a,描述乙個課程。 之後 n 行,每行兩個整數 c,d,描述一件工作。

輸出格式:

乙個整數,表示 mark 最多可以做多少件工作。

輸入樣例

輸出樣例

10 1 2

3 2 5

4 11 3

第 0 天至第 2 天做第二件工作 1 次,第 3 天至第 4 天參加課程,能力值變為 5。然後第 5 天至第 9 天做第一件工作 5 次。第 10 天 mark 不可以繼續做工作了。所以 mark 最多做 6 次工作。

對於 20% 的資料,t,s,n≤10。

對於 50% 的資料,t,n≤1000。

對於 100% 的資料,s≤100,m,l≤10000,a≤100。n≤10000,c≤100, d≤10000,t≤10000。

根據題目,我們嘗試用動態規劃來解決這道題。

狀態:f[i][j]第i天時能力值為j的最大工作量

轉移:

對於上面的轉移,我們有一下的一些優化:

由此我們的狀態轉移方程就變成了這樣:

初始值: 

這是這道題最神奇的地方了,他的初始值分為兩部分:

f[0][1]  = 0表示的是第0天時能力值為1,且無法工作。

對於其餘的f則要賦初值為負無窮。

為什麼呢?因為對於這道題中有很多的狀態是無效狀態,對於無效狀態f[i][j]是無法在第 i 天之前得到 j 的能力值卻在 i 天的時候有用 j 的能力值去做了工作(即對答案產生了貢獻),比如說在輸入樣例中,f[2][4] , f[2][5]就是無效狀態。我們對比分析一下有效狀態和無效狀態之間的關係,我們發現有效狀態只會由有效狀態轉移得到,那麼我們的問題就是找到最開始的有效狀態是什麼了,根據題目中的「現在 mark 的能力值為 1」和「我們認為今天是第 0 天」我們可以確定最初的有效狀態是f[0][1] = 0。又因為我們的g陣列要求當前階段的所有狀態的最大值(包括無效狀態),所以我們要消除掉所有無效狀態對答案的影響,注意到我們的有效狀態只會通過工作這種轉移方式轉移到無效狀態,而這種轉移方式對答案的改變每次只+1,而其餘的轉移都是取min和取max,所以我們就可以像上面那樣賦初值。

#include using

namespace

std;

int ke[10005][105], g[10005

];int f[10005][105

];int po[10005

];int

main()

for(int i = 1; i <= n; ++i)

for(int i = 2; i <= maxc; ++i)

po[i] = min(po[i], po[i - 1

]); f[

0][1] = 0

;

for(int i = 1; i <= t; ++i)

}printf(

"%lld\n

", g[t]);

}

2007 4 24工作計畫

成果 頁面完成 logic 標籤 struts 提供3 個風格的邏輯標籤 取值標籤,控制流標籤,以及反覆標籤。struts 邏輯標籤的 3 種型別 標籤目的 取值標籤 測試值是否相等,小於,大於,空 空白或者 null 或者是否存在 控制流標籤 或者重定向請求 重複標籤 通過某些集合型別進行迭代 s...

如何制定工作計畫

工作計畫是什麼 東東 查閱n多資料後發現,它不是我們所認識的那個東東,資料上一致認為它是 對即將開展的工作的設想和安排,如提出任務 指標 完成時間和步驟方法等。1.明確工作步驟,提高工作效率,避免遺漏工作。2.減少盲目性工作,不做無用功,節省時間。3.提高工作質量,使工作按計畫有條不紊進行。4.主動...

2023年工作計畫

1 總結自己一天任務的完成情況 最好的方式是寫工作日誌,把自己今天完成了什麼事情,遇見了什麼問題都記錄下來,日後翻看好處多多 2 考慮自己明天應該做的主要工作 把明天要做的事情列出來,並按照優先順序排列,第二天應該把自己效率最高的時間分配給最重要的工作 3 考慮自己一天工作中失誤的地方,並想出避免下...