编程语言
首页 > 编程语言> > AcWing算法基础课第五讲

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