求01揹包前k優解的價值和
輸入格式:
第一行三個數k、v、n
接下來每行兩個數,表示體積和價值
輸出格式:
前k優解的價值和
題解:這道題目是在01揹包的基礎上求出前k個最優解。
dp[i][j]: 揹包容量為i,第j優解的值。
由於任意兩個揹包不能完全相同,所以只初始化dp[0][1]=0;
因為要求必須恰好裝滿,所以其他的初始化為最小。
dp[i][1....k]=max(dp[i][1..k],dp[i-w][1...k]+v);
即dp[i][1....k]中的k個元素為dp[i][1..k]中的k個元素+dp[i-w][1...k]中的k個元素的前k大的元素。
合併兩個陣列的時候利用歸併排序的原理合併。
#include
int f[5001][51];
intmain
()
} }
ans = 0;
for(i = 1; i <= k; ++i)
ans += f[v][i];
printf("%d\n", ans);
return
0;
}
多人揹包問題
爆了。而且是這種半年前刷過的題目。演算法是合併兩個有序的序列,其他的方程之類與單人揹包其實差不多。code include include include include define swap a,b,t define max a,b define min a,b define maxk 55 d...
題目 多人揹包
dd 和好朋友們要去爬山啦!他們一共有 k 個人,每個人都會背乙個包。這些包的容量是相同的,都是 v。可以裝進揹包裡的一共有 n 種物品,每種物品都有給定的體積和價值。在 dd 看來,合理的揹包安排方案是這樣的 每個人揹包裡裝的物品的總體積恰等於包的容量。每個包裡的每種物品最多只有一件,但兩個不同的...
動歸 0 1揹包與完全揹包(洛谷P1048 採藥)
貪心與揹包的不同 題目描述 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段...