Eden的新揹包問題 s 題解

2021-10-06 16:38:35 字數 1284 閱讀 9301

題目鏈結

首先,50分做法:

把原先的多重揹包二進位制拆分為01揹包

100分做法:

考慮優化

設定狀態 f[i

][j]

f[i][j]

f[i][j

] 表示到第 i

ii 個時總體積為 j

jj 的最大價值,那麼我們只要求 f[d

i−1]

[ei]

f[d_i-1][e_i]

f[di​−

1][e

i​] 就可以把第 d

id_i

di​ 個給忽略掉啦,然後後半段只要從後往前做預處理,然後再來個for迴圈合併答案就可以了。

code:(有點醜,慎看)

#include

using

namespace std;

#define s1(a,n) sort(a+1,a+n+1)

#define s2(a,n) sort(a+1,a+n+1,mycmp)

#define ll long long

#define sg string

#define st struct

#define f1(i,l,r) for(int i=l;i<=r;++i)

#define f2(i,r,l) for(int i=r;i>=l;--i)

#define f3(i,a,b) for(int i=a;i;i=b)

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

#define sf scanf

#define pf printf

#define fo freopen

const

int maxn=

1000+10

;int n,q,ans,a[maxn]

,b[maxn]

,c[maxn]

,d,e,f[maxn]

[maxn]

=,g[maxn]

[maxn]

=,l,r,k;

bool

mycmp

(int x,

int y)

void

init()

void

work()

if(r>0)

}f1(i,1

,n)if

(r>0)

}}void

print()

}int

main()

題解 HEOI2013Eden 的新揹包問題

這題真的神奇了 蜜汁複雜度 應該是乙個比較連貫的思維方式 去掉乙個物品,那麼我們轉移的時候不考慮它就好了唄。考慮暴力 每一次都對剩餘的n 1個物品進行多重揹包轉移,獲得答案。既然可以優化,就說明一定有重複計算的地方 畫出一張方格圖,把不需要的格仔塗掉 我們突然發現每乙個可以有兩部分組成,而兩部分可以...

HEOI2013 Eden 的新揹包問題

題面 原題過於繁複,這裡口述,多重揹包,多次詢問,每次詢問的揹包容量不一樣,並且每次詢問會規定乙個物品不能選 這個規定的物品每次詢問都會改變 題解首先考慮對詢問的兩個要求,容量不一樣很好處理,因為dp跑揹包的過程中本來就會記錄不同容量時的答案。對於規定乙個物品不能選怎麼處理呢?不計算這乙個物品,需要...

揹包問題解析

今天看到演算法 c語言實現這本書 第五章遞迴與樹 中 揹包問題,想到對這個問題理解不夠透徹.希望利用第一篇技術部落格好好的吃透它.揹包問題是什麼?設有i類不同大小和價值的物品,揹包的可用容積為cap,進行合理的物品選擇使得所裝入的物品價值最大.揹包問題解法?設定 揹包大小為cap,對應第i項物品記為...