動態規劃 洛谷p1616 瘋狂的採藥
同樣也是洛谷的動態規劃乙個普及-的題目,接下來分享一下我做題**
看到題目,沒很認真的看資料大小,我就提交了我的**:
1測試了幾個測試用例,過了 ,於是乎,我就自信滿滿的提交了!//動態規劃 洛谷p1616 瘋狂的採藥
2 #include3 #include4
using
namespace
std;
5int value[10005];//
價值陣列
6int times[10005];//
時間陣列
7int dp[10000003];//
t的範圍1e7
8int
main()916
//從小遍歷到大進行規劃 因為這題可以選無數個一樣的
17for (int i = 1; i <= t; ++i)
1825}26
}27 cout <
28return0;
2930 }
但是!
仔細觀察資料大小,經典的沒開long long
於是改正:
1然後!//動態規劃 洛谷p1616 瘋狂的採藥
2 #include3 #include4
using
namespace
std;
5int value[10005];//
價值陣列
6int times[10005];//
時間陣列
7long
long dp[10000003];//
t的範圍1e7 long long !!!!
8int
main()916
//從小遍歷到大進行規劃 因為這題可以選無數個一樣的
17for (int i = 1; i <= t; ++i)
1825}26
}27 cout <
28return0;
2930 }
結束啦!
總結歸納一下: 這題和p1048
[noip2005 普及組] 採藥 非常像,只是資料加強了些,而且我們對比可以發現,還有乙個區別就是每個藥可以採摘無數次。
於是我們歸納出乙個模板,像只能採摘一次,也就是選擇一次的揹包問題,我們用採摘時間time值來做外層迴圈,反正每次只能選擇一次,也就是拿每種草藥的時間來遍歷.
//但是像這一題,每次可以選擇無數次,我們外層迴圈就只能用時間了,有點像選硬幣湊錢問題。從1一直遍歷到最大的time。內層去遍歷每一種草藥,因為可以採摘多次,得出我們的模板:也就是for(int i=1;i<=m;++i)
}
for (int i = 1; i <= t(最大時間); ++i)從小到大隊每乙個時間進行dp 算出每乙個時間的最優解}}
洛谷 P1616 瘋狂的採藥
題目概述 給定時間t,草藥數n,採每組草藥所需的時間a i 和該組草藥的價值b i 求在給定的時間內能採到的草藥的最大價值。每種草藥可以無限採。n 10000,且n t 10 7 解題思路 我們知道,對於這類揹包問題,時間複雜度為 n t 在題目所給的範圍內不會超時,方法與01揹包一致,不過掃瞄的順...
洛谷P1616 瘋狂的採藥
完全揹包,可以用乙個常數優化,對於同乙個價值的量,僅儲存花費最小的那個就行了,因為每種都有無限多個。includeusing namespace std int n,v int c 10005 w 10005 int d 100005 int mincost 10005 pos void compl...
洛谷p1616瘋狂的採藥
這是個樸實無華的名字,所以下面是一篇樸實無華的文章,請大牛們輕噴 洛谷上這道題確實很瘋狂。其實這是一道完全揹包的板子題,但有兩點需要注意 所以,獻上第一次全wa includeusing namespace std int f 105 105 w 105 c 105 直接用的板子,陣列開的不夠大re...