P6240 好吃的題目(分治 揹包)

2021-10-21 12:09:47 字數 2570 閱讀 5231

類似於線段樹分治,在每個節點預處理[l,

mid]

,[mi

d+1,

r]

[l,mid],[mid+1,r]

[l,mid

],[m

id+1

,r]的揹包,然後詢問即可

一般**就類似下面的寫法,但是此題有點卡空間於是稍微優化了一下空間。

時間複雜度o

o\o

#include

using

namespace std;

using ll=

long

long

;constexpr

int n=

40010

;int n,m,q;

int v[n]

,w[n]

;ll fl[n]

[205

],fr[n]

[205];

int b[

200010];

ll ans[

200010];

struct node

;void

solve

(int l,

int r,vector

&vec)

vector vl,vr;

int mid=l+r>>

1,idx=0;

for(

int i=

0;isize()

;i++

)for

(int i=l;i<=r;i++

)for

(int j=

0;j<=m;j++

) fl[i]

[j]=fr[i]

[j]=-1

;for

(int j=

0;j<=m;j++

) fl[mid+1]

[j]=fr[mid]

[j]=0;

for(

int i=mid;i>=l;i--

)for

(int j=

0;j<=m;j++

)for

(int i=mid+

1;i<=r;i++

)for

(int j=

0;j<=m;j++

)for

(int i=

1;i<=idx;i++)if

(vl.

size()

)solve

(l,mid,vl);if

(vr.

size()

)solve

(mid+

1,r,vr);}

intmain()

);}solve(1

,n,vec)

;for

(int i=

1;i<=q;i++

) cout<<<

'\n'

;return0;

}

優化空間後**

#include

using

namespace std;

using ll=

long

long

;constexpr

int n=

40010

;int n,m,q;

int v[n]

,w[n]

;ll f[n]

[205];

int b[

200010];

ll ans[

200010];

struct node

;void

solve

(int l,

int r,vector

&vec)

vector vl,vr;

int mid=l+r>>

1,idx=0;

for(

int i=

0;isize()

;i++

)for

(int i=l;i<=r;i++

)for

(int i=mid-

1;i>=l;i--

)for

(int j=

0;j<=m;j++

)for

(int i=mid+

2;i<=r;i++

)for

(int j=

0;j<=m;j++

)for

(int i=

1;i<=idx;i++)if

(vl.

size()

)solve

(l,mid,vl);if

(vr.

size()

)solve

(mid+

1,r,vr);}

intmain()

);}solve(1

,n,vec)

;for

(int i=

1;i<=q;i++

) cout<<<

'\n'

;return0;

}

揹包問題 完全揹包 P1616 瘋狂的採藥

p1616 瘋狂的採藥 和01揹包相比,每種物品的數量變得無限了,但還是有乙個 條件,就是不能超過揹包總量的,假設取 k 件物品 i k s i c,這樣就轉化成多重揹包了。但是,在二維層面是很容易簡化的。for i 1 i n i j 這層迴圈,從小到大計算,那麼就有 f p v i f i p ...

洛谷P1782 旅行商的揹包 多重揹包

小s堅信任何問題都可以在多項式時間內解決,於是他準備親自去當一回旅行商。在出發之前,他購進了一些物品。這些物品共有n種,第i種體積為vi,價值為wi,共有di件。他的揹包體積是c。怎樣裝才能獲得盡量多的收益呢?作為一名大神犇,他輕而易舉的解決了這個問題。然而,就在他出發前,他又收到了一批奇貨。這些貨...

hdu5616(理解01揹包很好的題目)

這題一看到不就是01揹包嗎?直覺想到對不對!有木有!然而,01揹包我們都是正的掃一遍,這裡需要反的再掃一遍,而且揹包裡面不一定非要儲存背的物體的重量,還可以是記錄這個揹包有沒有用過哈 首先要正的掃一遍,就是物品那端不放砝碼,只在另一端放砝碼,看有多少重量可以放到 這裡記錄的是該重量能否被訪問到,所以...