POJ 2184 (01揹包)
題意:給出了n頭牛的智力值和幽默值,要求智力值和幽默值和的最大值;
思路:這是一個01揹包問題,要麼選要麼不選,但由於智力值和幽默值都存在負值,那麼問題就是怎麼處理負值。我們只需要把陣列延長一倍即可。
dp[i]代表智力為i時幽默值的最大值。
dp[j] = max(dp[j],dp[j-a[i]]+b[i]);
需要注意的是在處理負數的時候要從0開始迴圈;
程式碼:
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; const int inf = 0x3f3f3f3f; int a[110],b[110]; const int maxm = 200010; const int maxn = 100010; int dp[maxm]; int main() { int n; cin >> n; for(int i = 0; i < n; i++) cin >> a[i] >> b[i]; memset(dp,-inf,sizeof(dp)); dp[maxn] = 0; for(int i = 0; i < n; i++) { if(a[i]>0) { for(int j = maxm; j >= a[i]; j--) { dp[j] = max(dp[j],dp[j-a[i]]+b[i]); } } else { for(int j = 0; j < maxm+a[i]; j++) { dp[j] = max(dp[j],dp[j-a[i]]+b[i]); } } } int ans = 0; for(int i = maxn; i < maxm; i++) { if(dp[i]>0) { ans = max(ans,i-maxn+dp[i]); } } cout<<ans<<endl; return 0; }
相關文章
- 【模板】01揹包、完全揹包
- 01 揹包
- 揹包問題(01揹包與完全揹包)
- 01揹包、完全揹包、多重揹包詳解
- 01揹包、有依賴的揹包
- 01揹包問題
- 01 揹包問題
- 01揹包和完全揹包問題解法模板
- 01 揹包的變形
- javascript演算法基礎之01揹包,完全揹包,多重揹包實現JavaScript演算法
- 2. 01揹包問題
- 01揹包面試題系列(一)面試題
- 01揹包問題的解決
- 用各種方法解01揹包
- ZOJ 3956——Course Selection System(01揹包)
- 你真的懂01揹包問題嗎?01揹包的這幾問你能答出來嗎?
- 從【零錢兌換】問題看01揹包和完全揹包問題
- 動態規劃--01揹包問題動態規劃
- 動態規劃 01揹包問題動態規劃
- 01揹包優先佇列優化佇列優化
- 動態規劃-01揹包問題動態規劃
- 【動態規劃】01揹包問題動態規劃
- 01揹包詳解第一版
- 【動態規劃】01揹包問題【續】動態規劃
- 揹包DP——完全揹包
- 揹包DP——混合揹包
- 【ACPC2013】馬里奧賽車(01揹包)
- 01揹包動態規劃空間優化動態規劃優化
- OpenJ_Bailian - 2773 採藥(01揹包板題)AI
- 分組揹包、完全揹包
- 關於01揹包個人的一些理解
- 動態規劃系列之六01揹包問題動態規劃
- 揹包
- 動態規劃-揹包01問題推理與實踐動態規劃
- CF 577 B. Modulo Sum 鴿巢原理/01揹包 (*1800)
- Day 37 | 01揹包問題 、416. 分割等和子集
- 01揹包問題理解動態規劃演算法動態規劃演算法
- 揹包DP