首页 > 其他分享 >01背包问题(动态规划)

01背包问题(动态规划)

时间:2023-03-23 14:12:47浏览次数:50  
标签:01 int 复杂度 背包 printf 物品 动态

【说明】

有 n 个物品,第i个物品价值为v(i),重量为w(i),其中v(i)和w(i)均为非负数,背包的容量为W,W为非负数。现需要考虑如何选择装入背包的物品,使装入背包的物品总价值最大。

物品数量 = 4 背包容量 = 5
物品编号 物品价值 物品重量
1 2 1
2 4 2
3 5 3
4 6 4

【代码实现】

#include <stdio.h>

// 物品数量 = 4     背包容量 = 5
//
// 物品编号 1   2   3   4
// 物品价值 2   4   5   6
// 物品重量 1   2   3   4

int max(int a, int b) {
    return a > b ? a : b;
}

int main() {
    int w[] = {0, 1, 2, 3, 4};
    int v[] = {0, 2, 4, 5, 6};

    int N = 4;
    int W = 5;

    int i, j;
    int f[N + 1][W + 1];

    for (int y = 0; y <= N; y++) {
        for (int x = 0; x <= W; x++) {
            f[y][x] = 0;
            printf("f[%d][%d]=%d\t", y, x, f[y][x]);
        }
        printf("\n");
    }

    printf("\n");

    for (i = 1; i <= N; i++) {
        for (j = 1; j <= W; j++) {
            if (j >= w[i]) {
                f[i][j] = max(f[i - 1][j], f[i - 1][j - w[i]] + v[i]);
                printf("f[%d][%d]=%d\t", i, j, f[i][j]);
            } else {
                f[i][j] = f[i - 1][j];
                printf("f[%d][%d]=%d\t", i, j, f[i][j]);
            }
        }
        printf("\n");
    }

    printf("\n最大价值:%d", f[N][W]);

    return 0;
}

【算法分析】

时间复杂度:O(N×W)
空间复杂度:O(N×W)

标签:01,int,复杂度,背包,printf,物品,动态
From: https://www.cnblogs.com/Smile-yun-1996/p/17247257.html

相关文章

  • Error message "error:0308010C:digital envelope routines::unsupported"
    由于升级Nodejs版本造成的,一般创建项目时为16.7.0版本,然后安装或升级了更高版本,再进行run的时候,会提示。Errormessage"error:0308010C:digitalenveloperoutines::unsu......
  • Delphi动态创建组件,并释放内存
    unitUnit1;interfaceusesWinapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,......
  • buuctf.pwn.ciscn_2019_n_1
    检测开启了栈不可执行的检测然后拖进IDA分析比较赤裸注意到,我们输入的是num1,但是比较的是num2所以我们需要把num1溢出到num2比较幸运的是,num1在num2的上方(空间......
  • 2019云栖大会精品资料免费下载
    场景杭州云栖大会前身为阿里云开发者大会,是中国最早的开发者创新展示平台。过去10年间,伴随互联网和云计算的蓬勃发展,大会规模逐年扩大。2018年云栖大会吸引了来自81个国家及......
  • Vue进阶(二十五):<component>实现动态组件
    一、前言<component>元素是vue里面的内置组件。在<component>里面使用:is,可以实现动态组件的效果。二、示例解析下面例子创建一个包含多子组件的vue实例。vue......
  • jsp 静态引入<%@ include %> 动态引入<jsp:include> 区别
    1.首先先介绍下,jsp机制: servlet容器,先将jsp转化成servlet,然后编译成.class文件,放置容器缓冲区【tomcat的work目录下】。每次调用jsp时,服务器会读取编译好的servler.class,......
  • vue学习笔记01
    vue3带来的变化vue3的发布时间2020/09/19。优点:更好的性能、更小的包体积、更好的TypeScript集成、更优秀的API设计。optionsAPI->CompositionAPI,由选项API......
  • 一次性搞定动态定时任务————SpringBoot定时任务动态管理通用解决方案
     文章目录一、功能说明二、快速使用三、实现原理1、动态管理实现(1)配置管理介绍(2)使用后处理器拦截SpringBoot原本的定时任务(3)使用ApplicationRu......
  • 20201306——Exp2 后门原理与实践
    一、实验准备1、实验要求使用netcat获取主机操作Shell,cron启动使用socat获取主机操作Shell,任务计划启动使用MSFmeterpreter(或其他软件)生成可执行文件,利用ncat或soca......
  • P2500 [SDOI2012]集合
    [SDOI2012]集合LuoguP2500[SDOI2012]集合题目描述小H在学习“集合与图论”的时候遇到了一个问题,他思考了很久依然无法很好完成这个问题。于是他只好来求助你了,给出n个......