51nod 1086 揹包問題 V2(多重揹包)

2021-07-23 08:56:34 字數 1085 閱讀 4601

51nod 1086 揹包問題 v2(多重揹包)

多重揹包每種有限定的數量,可以轉化為01揹包來做。

#include 

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define inf 0x3f3f3f3f

#define pi acos(-1.0)

#define e 2.71828

#define mod 1000000007

#define n 110

int dp[50005];

int v[n],w[n],c[n];

int main()

printf("%d\n",dp[m]);

return

0;}

時間優化:

但是,這題不像hdu 2191那樣,資料小。如果應用以上方法,此題最壞情況應為:o(n*w*c[i])。

我們需要使用二進位制,任何乙個數都可以由二的冪表示。

比如ci = 14,我們可以把它化成如下4個物品:

重量是wi,體積是vi

重量是2 * wi , 體積是2 * vi

重量是4 * wi , 體積是4 * vi

重量是7 * wi , 體積是7 * vi

我們用這4個物品代替原來的14個物品。時間複雜變為o(w*sigma(logc[i]))。

int dp[50005];

int v[n],w[n],c[n];

int main()

int k = c[i];

for(int j = m; j >= v[i]*k; j--)

dp[j] = max(dp[j],dp[j-v[i]*k]+w[i]*k);

}printf("%d\n",dp[m]);

return

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為整數 求揹包能夠容納...