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