标签:背包 int bag 算法 基础课 物品 include 1010 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。