預處理01揹包

2021-09-26 11:11:16 字數 1183 閱讀 7150

輸入輸入第一行包含三個正整數n,m,t,代表商店物品的數量,雞尾酒帶的錢,和詢問的次數。(n,m<=2000,t<=3000)

接下來n行,每行輸入兩個正整數,分別代表第i個物品在平常的**ai和價值bi。(ai<=m, bi<=1e9)

接下來有t組詢問,每組詢問包含三個數字,x,c,d。代表某一天第x個物品參與「特別活動」,並且**變為c,價值變為d。(c<=m,d<=1e9)

輸出對於每組詢問,回答雞尾酒那一天可以購買的物品最大價值和。

3 10 3

1 25 10

4 91 3 8

2 3 5

3 4 5

1916

17正反各預處理一遍01揹包 o(n*m)

t組樣例 只能o(m)

#include using namespace std;

#define rep(i,a,n) for (int i=a;i<=n;i++)

#define pb push_back

#define mp make_pair

#define io ios::sync_with_stdio(false)

#define fi first

#define se second

typedef long long ll;

typedef pairpii;

const int maxn=2e5+5;

const int maxm=1e6+5;

const ll inf=0x3f3f3f3f3f3f3f3f;

const ll mod=1e9+7;

ll w[2005],v[2005],ans1,ans2;

ll pre[2005][2005],suf[2005][2005];

int n,m,t,x,c,d;

int main()

for(int i=1;i<=n;i++)

for(int i=n;i>=1;i--)

while(t--)

cout用到中間的pre,suf的dp值 所以else遞推不能省略 否則會wa

如果直接求dp[n][m] dp方程可以不用管else遞推

HDU 2546 飯卡 01揹包 預處理

這是一道01揹包問題,但是需要預處理一下,因為當你的錢不夠5塊錢的時候,你什麼都買不了,所以直接輸出錢數,當你的錢大於5塊錢的時候,你可以先拿出來5塊錢,留著最後去買最貴的菜,現在你剩下m 5塊錢,排個序把最貴的留在最後,然後就用01揹包把這m 5盡量裝滿 遍歷1 n 1種菜,因為n是最貴的菜要留給...

揹包 01揹包

01揹包 有n種物品與承重為m的揹包。每種物品只有一件,每個物品都有對應的重量weight i 與價值value i 求解如何裝包使得價值最大。dp i,v 表示前i個物體 包括第i個 面對容量為v的揹包的最大價值,c i 代表物體i的重量,w i 代表物體i的價值 如果第i個物體不放入揹包,則揹包...

Python處理01揹包問題

問題描述 01揹包是在n件物品取出若干件放在空間為v的揹包裡,每件物品的體積為v1,v2 vn,與之相對應的價值為p1,p2 pn 所有的體積值均為整數 環境工具 win7 python2.7 解決過程 考慮用動態規劃的方法來解決 階段 在前n件物品中,選取若干件物品放入揹包中 狀態 在前n件物品中...