題目鏈結
首先,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項物品記為...