51Nod1257 揹包問題 V3

2021-08-19 11:22:50 字數 823 閱讀 2415

題目看這裡

01分數規劃入門題

這道題有非常經典的錯誤解法:按照pi/wi排序

這樣是不能保證答案最大的,反例(本體樣例)已經有了

那麼我們來考慮怎麼做

首先我們二分這個答案ans

讓後我們給每個物品i設定乙個權值v[i]=p[i]-ans*w[i]

所有物品按照v排序,取前k大求和

那麼如果ans是正確答案,那麼顯然,這個和s=0

如果ans大於正確答案,s<0

如果ans小於正確答案,s>0

發現是滿足二分的單調性的,所以這樣是對的,複雜度o(n log n log pi)

不過還有一種更加快的迭代的做法

我們將所有物品按照v排序,取前k大的物品計算一下∑pi/∑wi的值res,如果ans和res差別很小就可以直接退出

否則令ans=res,重複上面過程

這個過程感覺很玄學,沒有二分清晰,但是跑的很快

我的**(二分)

#include#include#include#define n 50010

#define ll long long

using namespace std;

int n,m,w[n],p[n],r[n]; ll x,y,c,a,b;

double s[n],l=

0,_r=

50000

;inline

bool cmp(

int x,

int y)

inline

int ok(

double k)

intmain

()

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

有n種物品,每種物品的數量為c1,c2.cn。從中任選若干件放在容量為w的揹包裡,每種物品的體積為w1,w2.wn wi為整數 與之相對應的價值為p1,p2.pn pi為整數 求揹包能夠容納的最大價值。input 第1行,2個整數,n和w中間用空格隔開。n為物品的種類,w為揹包的容量。1 n 100...

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

51nod 1086 揹包問題 v2 多重揹包 多重揹包每種有限定的數量,可以轉化為01揹包來做。include include include include include include include using namespace std define ll long long defin...

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

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