背包问题求具体方案

简介: 笔记

先从后往前求背包问题 然后从前往后求具体方案

因为是求字典序最小的方案 那么 如果当前的物品能选就一定要选

#include<bits/stdc++.h>
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 = n ;i >= 1;--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]);
        }
    }
    int j = m;
    for(int i = 1;i <= n;++i){
        //如果背包的容量还能放下 i 并且放与不放答案相同 那么就一定要选
        if(j >= v[i] && f[i][j] == f[i + 1][j - v[i]] + w[i]){
            cout << i << " " ;
            j -= v[i];
        }
    }
    return 0;
}
目录
相关文章
|
1月前
|
C语言
末谈背包问题求具体方案
末谈背包问题求具体方案
|
6月前
|
机器学习/深度学习 算法 测试技术
【动态规划】【C++算法】1335 工作计划的最低难度
【动态规划】【C++算法】1335 工作计划的最低难度
|
人工智能 算法 决策智能
动态规划之背包问题(01背包问题、完全背包问题、方案数填满型背包问题)
动态规划之背包问题(01背包问题、完全背包问题、方案数填满型背包问题)
237 1
|
算法
动态规划(以背包问题为例)
动态规划(以背包问题为例)
105 0
|
算法 C++
【每日算法Day 109】五大解法,带你深入了解完全背包方案数
【每日算法Day 109】五大解法,带你深入了解完全背包方案数
102 0
|
算法 C++
|
存储 算法 C++
算法基础系列第五章——动态规划之背包问题(1)
算法基础系列第五章——动态规划之背包问题(1)
151 0
算法基础系列第五章——动态规划之背包问题(1)
|
算法 C++
算法基础系列第五章——动态规划之背包问题(2)
算法基础系列第五章——动态规划之背包问题(2)
73 0
算法基础系列第五章——动态规划之背包问题(2)