輸入輸入第一行包含三個正整數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件物品中...