51NOD 揹包問題v2 動態規劃

2021-07-23 23:01:25 字數 2055 閱讀 6116

有n種物品,每種物品的數量為c1,c2......cn。從中任選若干件放在容量為w的揹包裡,每種物品的體積為w1,w2......wn(wi為整數),與之相對應的價值為p1,p2......pn(pi為整數)。求揹包能夠容納的最大價值。

input

第1行,2個整數,n和w中間用空格隔開。n為物品的種類,w為揹包的容量。(1

<= n

<= 100,1

<= w <= 50000)

第2 - n + 1行,每行3個整數,wi,pi和ci分別是物品體積、價值和數量。(1

<= wi, pi

<= 10000, 1

<= ci <= 200)

output

輸出可以容納的最大價值。

input示例36

2253

3814

1output示例

9

典型的多重揹包問題,可是我用的是01揹包的做法,記得之前也是這樣子做。

這裡就是把多重揹包拆分成01揹包的做法。

我之前是1,1,1,1,1.

...拆的,然後t了。

所以呢,要對此進行優化一下。

怎麼優化呢,我們可以根據二進位制來拆分揹包。

既拆分成1,2,4,8,....... ,( 1

<<(n-1) )

那麼ci怎麼變化的,就是每一次拆分ci- 1

<<(i+1),

最後還有對ci進行討論,如果不為0,需要再開乙個空間存剩下的。

然後01揹包,dp[j]=max(dp[j],dp[j-w[i]]+v[i]).

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define mod 1000000007

#define fir first

#define sec second

#define fin freopen("/home/ostreambaba/文件/input.txt", "r", stdin)

#define fout freopen("/home/ostreambaba/文件/output.txt", "w", stdout)

#define mes(x, m) memset(x, m, sizeof(x))

#define pii pair

#define pll pair

#define inf 1e9+7

#define pi 4.0*atan(1.0)

#define lowbit(x) (x&(-x))

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

double eps = 1e-12;

const

int maxn = 50010;

using

namespace

std;

inline

int read()

while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();

return x*op;

}int main()

if(p!=0)

}int dp[maxn];

mes(dp,0);

for(int i=0;ifor(j=w;j>=n[i];--j)

}cout

0;}

51NOD 1086 揹包問題 V2

1086 揹包問題 v2 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 有n種物品,每種物品的數量為c1,c2.cn。從中任選若干件放在容量為w的揹包裡,每種物品的體積為w1,w2.wn wi為整數 與之相對應的價值為p1,p2.pn pi為整數 求揹包能夠容納...

51nod1086 揹包問題 V2

我都快不會寫二進位制優化多重揹包了。卡了一下常數從rank100 到20 include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i ...

51Nod 1086揹包問題 V2

1086 揹包問題 v2 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 有n種物品,每種物品的數量為c1,c2.cn。從中任選若干件放在容量為w的揹包裡,每種物品的體積為w1,w2.wn wi為整數 與之相對應的價值為p1,p2.pn pi為整數 求揹包能夠容納...