P1048 採藥(洛谷)

2021-10-10 11:01:51 字數 1316 閱讀 7787

傳送門

中文題面,不描述。

這道題記憶化搜尋和dp都可以實現,實際上就是乙個0-1揹包問題。選和不選獲得乙個最大值輸出即可。

這裡給出兩種解決方案。

dp:這個是0-1揹包

dp[i]表示時間耗費為i時的最大價值。

我們就可以二重迴圈遍歷即可。

對於第i件物品,從總的時間t開始到tim[i]結束。維護dp[j]的乙個最大值。從前面的dp轉移過來維護乙個最大值即可。

記得初始話dp為0

對應的還有一道題是瘋狂的採藥,是一道多重揹包問題~

傳送門跟0-1揹包不同的是多重揹包可以無限次數的獲取,所以多重揹包從前往後,0-1揹包從後往前;

這道題對應的關鍵部分是:

for

(int i =

1; i <= m; i++

)}

記憶化搜尋的**部分:

#include

#define mst(a, n) memset(a, n, sizeof(a))

using

namespace std;

const

int n =

1e3+10;

int tim[n]

;int value[n]

;int t, m;

int dp[n]

[n];

intdfs

(int x,

int y)

if(dp[x]

[y]!=-1

)if(y >= tim[x]

)else

}int

main()

cout <<

dfs(

1, t)

<< endl;

return0;

}

dp**部分:

#include

#define mst(a, n) memset(a, n, sizeof(a))

using

namespace std;

const

int n =

1e3+10;

int tim[n]

;int value[n]

;int t, m;

int dp[n]

;int

main()

for(

int i =

1; i <= m; i++)}

cout << dp[t]

<< endl;

return0;

}

洛谷 P1048 採藥

題目描述 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間裡...

洛谷 P1048 採藥

題目描述 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間裡...

洛谷p1048採藥

辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間裡,你可以採...