題解 luogu p1156 垃圾陷阱

2022-09-18 02:30:32 字數 620 閱讀 5247

揹包

總結:1.狀態要根據問的問題設計,一開始我設計dp[i]是在i時間時的最高高度,而題目卡門最長可以活多久,這樣設計的話若不能出去,則這個不好判斷。所以設計為dp[i]是在i的高度時,卡門最多可以後活多久,這樣問題便迎刃而解。

2.不用將牛的壽命減去時間,直接將牛可以存活的時間與當前時間比較即可。

3.關於狀態設計時,  dp[j+a[i].h] = max(dp[j+a[i].h], dp[j]);這個是選擇堆積時,我們這時候直接選擇最大的壽命即可

dp[j] += a[i].f; 這個是選則吃垃圾時的最大壽命。

#includeusing

namespace

std;

struct

nodea[

105];

int d, g, dp[105

];bool

cmp(node x, node y)

intmain()

dp[j+a[i].h] = max(dp[j+a[i].h], dp[j]);

dp[j] +=a[i].f;

}cout

<< dp[0

];

return0;

}

luogu P1156 垃圾陷阱

經歷了一次ce,兩次wa 45,一次wa 91,終於a掉了此題。f i j 表示前i個物品堆成j高度時的生命值。對於每一件物品,都有吃掉或是把它堆起來兩種方案。如果奶牛堅持不到吃到下乙個物品,那麼就無需進行此次轉移。而如果不吃而將其堆起來,高度超過了井的深度,那麼由於是1 n列舉的,所以此時的時間就...

Luogu P1156 垃圾陷阱 DP

f i j 表示在第i個垃圾,高度為j的最大生命值 轉移分三部分 如果j 當前垃圾的高度,且兩個垃圾間的時間小於等於上乙個狀態f i 1 j a i v 的生命值,則可以墊高度 如果j 當前垃圾的高度,且兩個垃圾間的時間小於等於上乙個狀態f i 1 j 的生命值,則可以吃 如果j 當前垃圾的高度,且...

LUOGU P1156 垃圾陷阱(揹包變形)

首先應該看得出是乙個揹包吧 那dp陣列的第一維肯定有前i個物品 那第二維放啥呢?血量?高度?時間?時間是完全可以排除的,因為牛肯定是在辣雞剛掉下的時候就使用它,而且對於subtask1 如果卡門可以爬出陷阱,輸出乙個整數表示最早什麼時候可以爬出 答案肯定剛好是某個辣雞下落的時間 血量呢?設dp i ...