洛谷 P1156 垃圾陷阱

2022-04-07 01:59:45 字數 1373 閱讀 3685

卡門――農夫約翰極其珍視的一條holsteins奶牛――已經落了到「垃圾井」中。「垃圾井」是農夫們扔垃圾的地方,它的深度為d(2≤d≤100)英呎。

卡門想把垃圾堆起來,等到堆得與井同樣高時,她就能逃出井外了。另外,卡門可以通過吃一些垃圾來維持自己的生命。

每個垃圾都可以用來吃或堆放,並且堆放垃圾不用花費卡門的時間。

假設卡門預先知道了每個垃圾扔下的時間t(0輸入格式:

第一行為2個整數,d和g(1≤g≤100),g為被投入井的垃圾的數量。

第二到第g+1行每行包括3個整數:t(0輸出格式:

如果卡門可以爬出陷阱,輸出乙個整表示最早什麼時候可以爬出;否則輸出卡門最長可以存活多長時間。

輸入樣例#1: 

20 4

5 4 9

9 3 2

12 6 10

13 1 1

輸出樣例#1: 

13

[樣例說明]

卡門堆放她收到的第乙個垃圾:height=9;

卡門吃掉她收到的第2個垃圾,使她的生命從10小時延伸到13小時;

卡門堆放第3個垃圾,height=19;

卡門堆放第4個垃圾,height=20。

解題思路:

一道dp題,用f陣列儲存狀態,其中f[i]表示垃圾堆高度為i時的最大生命,迴圈d~0,如果這個高度的生命值不小於這個垃圾丟下來的時間,並且如果 高度+這個垃圾的高度不小於d,說明卡門可以出來了,就輸出這個垃圾丟下來的時間,否則 這個高度+這個垃圾的高度 的生命值=max(f[d~0]),即不吃垃圾用它來堆,此時高度+=這個垃圾的高度,這個高度的生命值+=吃這個垃圾增長的生命值,即吃垃圾,此時高度不變,最後輸出f[0],表示最長存活時間.

ac**:

1 #include2 #include3

using

namespace

std;

4int d,g,f[105];5

struct

kkk e[105];8

bool cmp(kkk a,kkk b)

11int

main()

24 f[j+e[i].h] = max(f[j+e[i].h],f[j]);//

狀態轉移

25 f[j] += e[i].f;//

狀態轉移 26}

27 printf("

%d",f[0]);//

如果他無論如何也出不去,就輸出最長存活時間

28return0;

29 }

洛谷P1156 垃圾陷阱

動規仍然是難關啊 卡門 農夫約翰極其珍視的一條holsteins奶牛 已經落了到 垃圾井 中。垃圾井 是農夫們扔垃圾的地方,它的深度為d 2 d 100 英呎。卡門想把垃圾堆起來,等到堆得與井同樣高時,她就能逃出井外了。另外,卡門可以通過吃一些垃圾來維持自己的生命。每個垃圾都可以用來吃或堆放,並且堆...

洛谷P1156 垃圾陷阱

這個題是乙個類似揹包問題,垃圾的高度看成物重,能增加的生命的長短看成價值,把井的高度看成揹包的大小,但和揹包不同的是,題目要求至少將這個揹包填滿,需要對 進行以下修改 開乙個結構體 記錄 a i t,a i f,a i h分別代表第i個物體的投入時間,持續生命時間和高度。設b j 表示到達高度j時所...

洛谷 P1156 垃圾陷阱

一頭牛被困在垃圾井中,要通過垃圾來維持生命,或堆高來逃出垃圾井 有n個垃圾,知道扔下的時間,堆放的高度,維持生命的時間,求逃出井的時間或最長存活時間 揹包。把垃圾的高度看成物重,維持生命的時間看成價值,把井的高度看成包的大小。include include include int d,g,ans 1...