01揹包第k大

2021-07-11 15:29:15 字數 830 閱讀 9141

嗯……這道題其實還是挺簡單的……

然後我就不會做了qaq

實際上就是設

f[i][j][k]為第i個物品,容量為j,第k個揹包的價值。

那麼則有f[i][j][p] =

f[i - 1][j - w[i]][1…k] + val[i]與f[i - 1][j][1…k]的第p個

然後因為我懶了一下……

我想:

誒?詢問最大值?

前k大?

然後搞了個堆下來……

然後就tle了tat

(話說我好像用堆就從來沒有用對過……

#include 

#include

#include

#include

#include

#define rep(i,n) for(int i = 1;i <= n;i ++)

#include

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

using

namespace

std;

int k,n,m,f[5005][55],val[205],w[205];

void merge(int now,int hv)

rep(i,k)f[hv][i] = tmp[i];

}int main ()

int ans = 0;

rep(i,k)ans += f[m][i];

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

return

0;}

hdu 2639 第k大01揹包

求每個狀態裡的k優解,然後合併 hdu 2639 求01揹包的第k大解。合併兩個有序序列 include include include include using namespace std const int maxn 110 int dp 1010 50 dp i j 表示容量為i,第j大的值...

hdu2639(01揹包變形 第k大揹包)

01揹包變形 求第k大揹包 多開一維 k 兩種情況分別放在a,b兩個陣列裡,將ab合併 即從小到大排序 取第k大 開乙個大小為k的陣列f i v 1.k 其中f i v k 表示前i個物品 揹包大小為 v時,第k優解的值。可以理解成,由f i 1 v 和f i 1 v c i w i 這兩個有序佇列...

大揹包問題(01揹包)

大揹包問題 有n乙個重量和 值分別w i 和v i 專案。出的這些產品中的總重量不超過w專案。查詢所有選定的方案 值的最大總和值。其中,1 n 40,1 w i v i 10 15,1 w 10 15.這個問題給人的第一感覺就是普通的01揹包。只是,看完資料範圍會發現。這次價值和重量都能夠是很大的數...