揹包的自我修養

2021-06-22 17:35:20 字數 1576 閱讀 6060

大概了解了揹包九講前面四章的內容。先 orz dd大神一分鐘……59,58,57……

……3,2,1。好,結束,總結一下三種揹包問題,01,完全,多重。都隸屬於動態規劃問題。

下面這是個人四天來的學習體會。

區別方式也很簡單:

①物品數量只有乙個,只存在放和不放的區別,01揹包。

②物品數量有無限多個,或者能完全把揹包裝滿,完全揹包。

③物品數量有限而且不能把揹包裝滿。多重揹包。

這也是在選擇策略時的呼叫條件。

我們這樣來表示:

int n,m;

//物品種類 和 揹包容量

int dp[10001];

//揹包不同狀態的價值

int cost[1001],value[1001],cot[1001];

//費用,價值,數量

當 cot[i]==1的時候,只存在放或者不放,這時候就選擇01揹包策略。

if(cot[i]==1)

zeroonepack(cost[i],value[i]);

當cost[i]*cot[i]>=m的時候,表明比能裝滿包還多,就用完全揹包策略。

else if(cot[i]*cost[i]>=m)

completepack(cost[i],value[i]);

剩下情況就使用 多重揹包策略。

else

multiplepack(cost[i],value[i],cot[i]);

這幾種策略,我前面的解題報告提過,現在都寫出來。

01揹包的情況:

void zeroonepack(int cost,int value)

//01揹包

從 m->0 保證是由上一狀態得來。

完全揹包:

void completepack(int cost,int value)

//完全揹包

從 0->m 由於物品無限多,放了之後還能放,就不像01一樣,必須選擇下個物品。也就不用倒過來保證選擇狀態。

多重揹包:

void multiplepack(int cost,int value,int cot)

//01揹包

void completepack(int cost,int value)

//完全揹包

void multiplepack(int cost,int value,int cot)

int ans=0;

for(int i=0;i<=m;i++)

//printf("%d ==\n",dp[i]);

ans=max(ans,dp[i]);

printf("%d\n",ans);

}}

至於揹包九講後面的五個內容,咱還是覺得暫時體會一下就好,不深入了。

想想還有沒看完的圖論,基本沒碰的計算機幾何和數論。唉。

測試的自我修養

前人的帖子,前人的經驗。記得當初第一次看了就感覺很受用。現給大家共享。2.初學者請不要看太多太多的書那會誤人子弟的,先找本系統的學,很多人用了很久都是只對部分功能熟悉而已,不系統還是不夠的。3.看幫助,不要因為很難而自己是初學者所以就不看 幫助永遠是最好的參考手冊,雖然幫助的文字有時候很難看懂,總覺...

打野的自我修養

我是從初三開始接觸lol,高中以lol娛樂,高中畢業的一年以內是對lol掌控的人生巔峰。後來雖然也玩,不過卻不怎麼在乎技術了。最擅長的應該是打野位置了,能力不高,也就是在鑽石局打打鬧鬧。先說一下擅長 的打野英雄吧。盲僧,劍聖,獅子狗和夢魘。為什麼說擅長呢,就是說當我拿到這四個英雄之後,只要我把龍龜b...

寒假的自我修養

一月八號放的假,到現在也有三個星期了。因為我本身不怎麼會寫文章,寫的話也會亂亂的沒有什麼邏輯可循,但是呢,我還是有在認真的記錄總結自己學習的東西的。我有乙個毛病,就是喜歡用筆去寫,然後等我寫完再去敲 反正總的來說,我寫的比敲的多。但是總會讓自己去敲一敲 提醒自己去多多的練習。本來打算是在除夕之前結束...