洛谷P1156 垃圾陷阱

2022-05-15 17:54:13 字數 1627 閱讀 1363

動規仍然是難關啊

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

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

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

假設卡門預先知道了每個垃圾扔下的時間t(0< t<=1000),以及每個垃圾堆放的高度h(1<=h<=25)和吃進該垃圾能維持生命的時間f(1<=f<=30),要求出卡門最早能逃出井外的時間,假設卡門當前體內有足夠持續10小時的能量,如果卡門10小時內沒有進食,卡門就將餓死。

輸入格式:

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

第二到第g+1行每行包括3個整數:t (0 < t <= 1000),表示垃圾被投進井中的時間;f (1 <= f <= 30),表示該垃圾能維持卡門生命的時間;和 h (1 <= h <= 25),該垃圾能墊高的高度。

輸出格式:

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

輸入樣例#1:

20 4

5 4 9

9 3 2

12 6 10

13 1 1

輸出樣例#1:

13

[樣例說明]

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

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

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

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

可以優化到一維

f[時間]=高度  (也有時間和高度調換的做法),對於每個垃圾決策吃或者不吃

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7int dp[4000];//

[時間]=高度

8int

d,g;

9struct

rbr[200

];12

int ans=100000;13

int anstime=0;14

bool flag=0;15

intcmp(rb a,rb b)

18int

main()

25 sort(r+1,r+g+1

,cmp);

26 dp[10]=0;27

for(i=1;i<=g;i++)

32//

printf("%d %d\n",i,dp[r[i].t]);

33for(j=r[g].t+r[i].f;j>=r[i].t;j--)38}

39}40//

處理出不去的情況:吃掉所有垃圾

41int ans=10;i=1;42

while(ans>=r[i].t && i<=g)

46 printf("%d"

,ans);

47return0;

48 }

洛谷 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...