演算法學習之路|蒜頭君的購物袋3
蒜頭君去超市購物,他有一隻容量為 V的購物袋,同時他想買 n 種物品,已知每種物品的體積 vi 和重要度 pi。蒜頭君想知道,怎麼挑選物品放入購物袋中,可以使得買到的物品重要度之和最大,且物品體積和不超過購物袋的容量。注意超市中每種物品的數量無限多。
輸入格式
第一行輸入兩個整數 nn, VV (1≤n≤1,000,1≤V≤10,000)。
接下來輸入 nn 行,每行輸入兩個整數 vi 和 pi (1≤vi,pi≤10,000),分別表示第 i 種物品的體積和重要度。
輸出格式
輸出一行,輸出一個整數,表示能買到物品的最大重要度之和。
樣例輸入
4 20
3 7
2 5
4 6
5 9
樣例輸出
50
解題思路:
由01揹包知:dpi=max(dpi-1]+p[i],dpi-1);
本題與01揹包的不同之處在於原本商品唯一,現在無數種了。
於是dpi=max(dpi-1,dpi-1]+p[i],dpi-1]+2*p[i]……);
因此,我們完全可以用dpi]來更新dpi的值。
即for(int j=v[i];j<=V;j++)
較大的容量由較小的容量來更新,且較小與較大的容量都可以重複商品,剛好不重不漏。
#include<iostream>
using namespace std;
int dp[10001];
int main(){
int n,V;
cin>>n>>V;
int v[1001],p[1001];
for(int i=1;i<=n;++i) cin>>v[i]>>p[i];
for(int i=1;i<=n;++i)
for(int j=v[i];j<=V;++j)
dp[j]=max(dp[j-v[i]]+p[i],dp[j]);
cout<<dp[V];
}
相關文章
- 計蒜客模擬賽D2T1 蒜頭君的兔子:矩陣快速冪矩陣
- 計蒜客模擬賽D1T1 蒜頭君打地鼠:矩陣旋轉+二維字首和矩陣
- 計蒜客模擬賽D2T2 蒜頭君的排序:區間逆序對(移動端點) + 樹狀陣列排序陣列
- 演算法學習之路|划拳演算法
- javaweb學習之路(3)CookieJavaWebCookie
- Laravel 學習之路 3 路由Laravel路由
- 演算法學習之路|A除以B演算法
- 演算法學習之路|列印排名演算法
- 演算法學習之路|方格分割演算法
- 演算法學習之路|朋友數演算法
- 演算法學習之路|SpellItRight演算法
- 演算法學習之路|歐幾里得遊戲演算法遊戲
- 演算法學習之路|月餅演算法
- 演算法學習之路|PATRanking演算法
- 演算法學習之路|列印沙漏演算法
- 演算法學習之路|快速排序演算法排序
- 演算法學習之路|結繩演算法
- 演算法學習之路|數零壹演算法
- 演算法學習之路|開學寄語演算法
- Web開發學習之路是否有盡頭Web
- 演算法學習之路|說反話演算法
- 演算法學習之路|幼兒園買玩具演算法
- 演算法學習之路|小賭怡情演算法
- 演算法學習之路|影像過濾演算法
- 演算法學習之路|日期問題演算法
- 演算法學習之路|賣個萌演算法
- 演算法學習之路|螺旋矩陣演算法矩陣
- 演算法學習之路|選擇題演算法
- 演算法學習之路|字元統計演算法字元
- 演算法學習之路|科學計數法演算法
- 前端學習演算法3:一道來自頭條的面試題前端演算法面試題
- 演算法學習之路|PlayOnWords(尤拉道路+dfs)演算法
- 演算法學習之路|舊鍵盤打字演算法
- 演算法學習之路|最簡分數演算法
- 演算法學習之路|檢驗身份證演算法
- 演算法學習之路|愛丁頓數演算法
- Python學習之路3-操作列表Python
- js學習之路3: 資料型別JS資料型別