AcWing算法基础课第五讲
作者:互联网
(typora要清理,暂时上传避免丢了)
#2 01背包问题
题目描述
有 \(N\) 件物品和一个容量是 \(V\) 的背包。每件物品只能使用一次。
第 \(i\) 件物品的体积是 \(v_i\),价值是 \(w_i\)。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。
试解
#include "iostream"
#include <bits/stdc++.h>
using namespace std;
int bag[1010],w[1010],v[1010],N,V;
int main(){
cin>>N>>V;
for(int i=1;i<=N;i++){
cin>>w[i]>>v[i];
}
for(int i=1;i<=N;i++)
{
for(int j=V;j>=0;j--)
{
if(j>=w[i])
{
bag[j]=max(bag[j-w[i]]+v[i], bag[j]);
}
}
}
cout<<bag[V];
return 0;
}
批改
A了
分析
还好没忘。最一开始学的时候,还写了一个带备忘录的贪心,不算是发明,道理本质上一样。
#include "iostream"
#include <bits/stdc++.h>
using namespace std;
int bag[1010],w,v,N,V;
int main(){
cin>>N>>V;
for(int i=1;i<=N;i++){
cin>>w>>v;
for(int j=V;j>=0;j--)
if(j>=w)bag[j]=max(bag[j-w]+v, bag[j]);
}
cout<<bag[V];
return 0;
}
比较基础,不放板子。
#3 完全背包问题
有 \(N\) 种物品和一个容量是 \(V\) 的背包,每种物品都有无限件可用。
第 ii 种物品的体积是 \(v_i\),价值是 \(w_i\)。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。
试解
#include "iostream"
#include <bits/stdc++.h>
using namespace std;
int bag[1010],w,v,N,V;
int main(){
cin>>N>>V;
for(int i=1;i<=N;i++){
cin>>w>>v;
for(int j=0;j<=V;j++)
if(j>=w)bag[j]=max(bag[j-w]+v, bag[j]);
}
cout<<bag[V];
return 0;
}
批改
A了
分析
也没忘。
比较基础,不放板子。
试解
批改
分析
试解
批改
分析
标签:背包,int,bag,算法,基础课,物品,include,1010,AcWing 来源: https://www.cnblogs.com/shanzr/p/16492353.html