【01背包】

简介: 笔记

有 NN 件物品和一个容量是 VV 的背包。每件物品只能使用一次。


第 ii 件物品的体积是 vivi,价值是 wiwi。


求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。

输出最大价值。


输入格式


第一行两个整数,N,VN,V,用空格隔开,分别表示物品数量和背包容积。


接下来有 NN 行,每行两个整数 vi,wivi,wi,用空格隔开,分别表示第 ii 件物品的体积和价值。


输出格式



输出一个整数,表示最大价值。


数据范围



0<N,V≤10000<N,V≤1000

0<vi,wi≤10000<vi,wi≤1000


输入样例


4 5
1 2
2 4
3 4
4 5

输出样例:


8

代码实现:

#include <iostream>
using namespace std ;
const int N = 1010 ;
int n, m ;
int v[N], w[N] ;
int f[N][N] ;
int main()
{
    cin >> n >> m ;
    for(int i=1; i <= n; i++)    cin >> v[i] >> w[i] ;
    for(int i = 1; i<=n; i++)
    {
        for(int j=0; j<=m; j++)
        {
            f[i][j] = f[i-1][j] ;
            if(j>=v[i] )    f[i][j] = max(f[i][j], f[i-1][j-v[i]] + w[i]) ;
        }
    }
    cout << f[n][m] << endl ;
    return 0 ;
 } 
相关文章
|
3天前
01背包问题的理解
01背包问题的理解
|
3月前
|
算法 容器
01背包问题
01背包问题
30 1
|
5月前
01背包-动态规划
01背包-动态规划
29 0
|
8月前
|
算法
动归背包2
动归背包2
42 0
|
11月前
背包问题——01背包|完全背包 2
背包问题——01背包|完全背包
137 0
|
11月前
|
算法 决策智能
背包问题——01背包|完全背包 1
背包问题——01背包|完全背包
239 0
|
11月前
|
算法 JavaScript 前端开发
动态规划-01背包
前言 动态规划和递归是一对CP,递归通过将大问题分解成小问题以求得答案,而动态规划则是通过求解小问题来组成大问题的解。虽然其本质都是先求小问题的解,但是问题的推算不同:
|
机器学习/深度学习 存储 算法
【背包问题】01背包问题
给定n种物品(每种物品只有一件)和一个背包:物品i的重量是wi,其价值 为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物 品的总价值最大? 对于每种物品,只有两种选择:装(1)或者不装(0),不允许装物品的一部分
191 0
【背包问题】01背包问题