美文网首页
背包问题(动态规划)

背包问题(动态规划)

作者: 张的笔记本 | 来源:发表于2019-12-10 23:11 被阅读0次
#include <iostream>
#define N 4//物品种数
#define B 10//总重限制
using namespace std;
int v[N] = {1, 3, 5, 9};//每种物品的单价
int w[N] = {2, 3, 4, 7};//每种物品的单重
int F[N + 1][B + 1];
int S[N + 1][B + 1];//记录最大物品号
//背包问题,线性帧数规划问题,迭代写法
void Knapsack(int n, int y){//对前n个物品选择,总重不超过y
    int i, j, temp0, temp1, temp3;
    for (i = 1; i <= n; ++i) {
        temp3 = w[i - 1];
        for (j = 1; j <= y; ++j) {
            temp0 = F[i - 1][j];
            if (j - temp3 < 0) {
                F[i][j] = temp0;
                S[i][j] = S[i - 1][j];
            } else {
                temp1 = F[i][j - temp3] + v[i - 1];
                if (temp0 > temp1) {
                    F[i][j] = temp0;
                    S[i][j] = S[i - 1][j];
                } else {
                    F[i][j] = temp1;
                    S[i][j] = i;
                }
            }
        }
    }
}
void Track(int n, int y, int *a){
    if (y <= 0) return;
    int temp = S[n][y];
    if (temp == 0) return;
    ++a[temp - 1];
    Track(temp, y - w[temp - 1], a);
}
int main(){
    Knapsack(N, B);
    cout<<"可以获得的最大价值为:"<<F[N][B]<<endl;
    
    int a[N];
    for (int i = 0; i < N; ++i) 
        a[i] = 0; 
    
    Track(N, B, a);
    
    for (int i = 0; i < N; ++i) 
        cout<<"第"<<i<<"种物品装入:"<<a[i]<<endl; 
    /*
    for(int i = 0; i <= N; ++i){
        for(int j = 0; j <= B; ++j){
            cout<<F[i][j]<<'\t';
        }
        cout<<endl;
    }
    cout<<endl;
    for(int i = 0; i <= N; ++i){
        for(int j = 0; j <= B; ++j){
            cout<<S[i][j]<<'\t';
        }
        cout<<endl;
    }
    */
    return 0;
}

原理参见 屈婉玲老师 算法设计与分析 ORZ

相关文章

  • 算法学习收藏

    动态规划问题 动态规划(最优子结构和重叠子问题的比较) 动态规划解决01背包问题 01背包问题 最优二叉查找树 《...

  • 初识动态规划

    0-1 背包问题 备忘录 动态规划-二维数组 动态规划-一维数组 0-1 背包问题升级版 回溯算法 动态规划-二维...

  • 2019-07-10 数据结构和算法(妙味杜鹏)

    八皇后 A *寻路 背包问题(动态规划方法) 背包问题(贪心算法)

  • 动态规划

    0-1背包问题 自己实现的0-1背包问题的动态规划解法,先贴上吧,动态规划原理解释有空再写。

  • 2022-02-19 动态规划高频题专题【1】

    动态规划基本类型 dp基础 背包问题 打家劫舍 股票问题 子序列问题 进阶动态规划 深入理解动态规划过程 定义dp...

  • 动态规划.背包问题

    动态规划 之 0-1背包问题 【背包问题】 现有n个物品,价值为`$$v_1,v_2....v_n$$ 重量为 现...

  • 动态规划 背包问题

    1.问题描述 有n个物体有重量和价值两个属性,一个能承重一定重量的背包。问怎么选择物体能实现背包里的价值最大化。 ...

  • 动态规划 背包问题

    本篇博文参考此博文,该博文PPT非常有助理解 问题描述:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背...

  • 背包问题(动态规划)

    原理参见 屈婉玲老师 算法设计与分析 ORZ

  • 动态规划:背包问题

    动态规划,都可以画网格解决! 背包问题 假设你是个小偷,背着一个可装4 磅东西的背包。你可盗窃的商品有如下3 件:...

网友评论

      本文标题:背包问题(动态规划)

      本文链接:https://www.haomeiwen.com/subject/hmkvgctx.html