傳送門
中文題面,不描述。
這道題記憶化搜尋和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採藥
辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間裡,你可以採...