Buyer o1揹包路徑查詢

2021-09-25 01:31:50 字數 1097 閱讀 6358

哆啦a夢班級舉辦個party,當然吃的東西必不可少,哆啦a夢負責採購任務,他得到了乙份清單,上面註明不同食品的受歡迎程度,哆啦a夢需要用一定的價錢盡可能達到的更大的受歡迎程度!例如,瓜子的受歡迎程度為20,瓜子的價錢是50元,那麼如果哆啦a夢選擇買瓜子,將花費50元,但受歡迎程度增加了20。為了避免食品單調性,每種食品只能買乙份,不能重複購買。 現在哆啦a夢需要知道如何採購才能達到最大的受歡迎程度,你能幫助他嗎?

輸入資料為多組,每組輸入的第一行有兩個正整數m和n(m<100&&n<1000),分別為哆啦a夢可以支配的錢數和清單上的可選擇的物品種類。 接下來的n行每行有兩個正整數,分別為每種物品的價錢和它的受歡迎程度(編號為1到n)。

如果存在物品購買,那麼輸出的第一行為能夠達到的最大的受歡迎程度。第二行為需要購買的物品的編號(如果有多種可能,輸出字典序靠前的那種),空格分隔每個數字;如沒有物品可以購買,輸出只有一行,為數字0。

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

30

#include

#define init(a,b) memset(a,b,sizeof(a))

const

int maxn=1e3+7;

using

namespace

std;

int m,n,w[maxn],v[maxn],dp[maxn][maxn];

int sta[maxn],tot=0;

intmain()}

for(int i=n,j=m;i>=1&&j>=1;i--)

}printf("%d\n",dp[n][m]);

for(int i=tot;i>0;i--)

}return0;}

01揹包路徑回溯

以此題為例 01揹包有選取和不選取兩種操作,每次記錄選取的操作在乙個新的陣列中。回溯時則減下每次加上的,就是過來時的路徑。1 include 2 using namespace std 3 define n 37 4intn 5 int p 40 a 40 c 40 m 40 g 40 6 intp...

揹包問題 1 揹包的引入

上篇文章我考慮的是可以找零的方式有幾種,是運用搜尋解決的,但是如果我們要解決的是優化問題,就是說最小要多少硬幣呢?題目的位址是 其實他是乙個揹包問題,所以我準備重學一下。最近做硬幣找零問題,它實際是個揹包問題,很多知識掌握的不紮實。這裡重新總結一下,老規矩,還是靠題目驅動,下面所有題目都給了鏈結 大...

揹包問題1

有n個魔法石,重量分別為w1,w2,w3 wn,有乙個可裝重量為s的揹包,從n件魔法石中取若干件,使得放入揹包的重量之和剛好為s,求放的方法,若不存在該種情況則輸出failed。輸入樣例 10 s 5 n 重量 1 2 3 4 5 輸出樣例 1 4 5 遞迴,即乙個乙個將物品放入揹包內試一下,設函式...