动态规划——背包问题(c语言)

动态规划——背包问题(c语言)/*背包问题:背包所能容纳重量为10;共五件商品,商品重量用数组m存储m[5]={2,2,6,5,4},每件商品的价值用数组n存储,n[5]={6,3,5,4,6};求背包所能装物品的最大价值。

大家好,又见面了,我是你们的朋友全栈君。

/*背包问题:
背包所能容纳重量为10;共五件商品,商品重量用数组m存储m[5]={2,2,6,5,4},
每件商品的价值用数组n存储,n[5]={6,3,5,4,6};求背包所能装物品的最大价值。
*/
#include<stdio.h>
#include<conio.h>
int main() {
    int m[5] = { 2,2,6,5,4 }, n[5] = { 6,3,5,4,6 };
    int flag[5] = { 0,0,0,0,0 };//符号标志位,表示地某个点是否装入背包,装入为1,未装入为0;
    int i, j, k;
    int c = 10, sum1 = 0, sum2 = 0;//sum1表示最终背包容纳的重量。sum2表示最终背包中容纳的最大价值的价值。
                                   //设一个二维数组,横坐标表示所装物品的标号,纵坐标表示背包所容纳的最大重量0~10;
    int mn[5][11];
    for (i = 4; i >= 0; i--) {//二维数组从下至上
        for (j = 0; j <= 10; j++) {
            if (i == 4) {
                if (m[i]>j)
                    mn[i][j] = 0;
                else
                    mn[i][j] = n[i];
            }
            else {
                if (m[i]>j) {
                    mn[i][j] = mn[i + 1][j];
                }
                else {
                    mn[i][j] = mn[i + 1][j]>mn[i + 1][j - m[i]] + n[i] ? mn[i + 1][j] : mn[i + 1][j - m[i]] + n[i];
                }
            }
        }
    }

    for (i = 0; i<5; i++) {
        if (mn[i][c] != mn[i + 1][c]) {//从二维数组上方开始,背包最大值c,mn[i][c]的值若与mn[i+1][c]的值不同,则m[i]未放入背包中(之前是自下往上放的)
            flag[i] = 1;
            c = c - m[i];//若放入背包,则背包可容纳总重量减少;
        }
        printf("%d ", flag[i]);
    }//输出所放入的物品序号

    for (i = 0; i<5; i++) {
        if (flag[i] == 1) {
            sum1 += m[i];
            sum2 += n[i];
        }
    }
    printf("\n背包容纳的重量为:%d 背包容纳的总价值为:%d", sum1, sum2);

    getch();
    return 0;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154547.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OPKG命令执行过程分析

    OPKG命令执行过程分析一、简介Opkg是一个基于ipkg的轻量级的软件包管理系统,主要用于嵌入式系统,目前应用opkg的有OpenWRT和OpenEmbedded。1Opkg的详细使用方法可以参考OpenWRT的WIKI页面2,不再赘述,本文将重点解释opkg的工作原理。Opkg的源代码可以在GoogleCode3或YoctoProject4上找到。Opkg的版本目前到了0.3.05,我使用的

    2022年6月6日
    36
  • JaxWsProxyFactoryBean调用WebService实例[通俗易懂]

    JaxWsProxyFactoryBean调用WebService实例[通俗易懂]WebServiceUtils工具类packagexxxx;importjava.util.ResourceBundle;importorg.apache.cxf.endpoint.Client;importorg.apache.cxf.frontend.ClientProxy;importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean…

    2022年7月21日
    12
  • aop动态代理机制有哪些_aop和动态代理的关系

    aop动态代理机制有哪些_aop和动态代理的关系这里的AOP指的是面向切面编程思想,而不是SpringAOP。AOP(AspectOrientProgramming),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。AOP实现主要分为静态代理和动态代理。-静态代理主要是`AspectJ`-动态代理主要是`SpringAOP`

    2022年10月9日
    0
  • matlab中wavedec2函数,[转载]小波滤波器–wavedec2函数

    matlab中wavedec2函数,[转载]小波滤波器–wavedec2函数wavedec2函数:1.功能:实现图像(即二维信号)的多层分解.多层,即多尺度.2.格式:[c,s]=wavedec2(X,N,’wname’)[c,s]=wavedec2(X,N,Lo_D,Hi_D)(我不讨论它)3.参数说明:对图像X用wname小波基函数实现N层分解,这里的小波基函数应该根据实际情况选择,具体办法可以:db1、db2、……db45、haar.输出为c,s.c为各层分…

    2022年6月16日
    70
  • python语言变量命名-以下选项中不符合 Python 语言变量命名规则的是( )。_学小易找答案…[通俗易懂]

    python语言变量命名-以下选项中不符合 Python 语言变量命名规则的是( )。_学小易找答案…[通俗易懂]【单选题】在Python中,正确的赋值语句为()。【单选题】Python语句print(chr(97))的运行结果是()。【多选题】影响管理者道德因素包括()。【单选题】表达式len(range(1,10))的值为()。【判断题】新闻可视化的方式千差万别,但万变不离其宗,就是要把好看的图表做出来,跟新闻故事无关。【单选题】执行语句for(i=1;i++2>6…

    2022年6月1日
    58
  • 【python】分苹果

    【python】分苹果问题:一堆苹果,5个人。第一个人将苹果丢掉一个,然后平均分成5份后拿走其中的一份;第二个人将剩余的苹果丢掉一个,然后再平均分成5份后拿走其中的一份,依次类推…第五个人在第四个人拿走剩下的那部分苹果中同样丢掉一个,然后平均分成5份后拿走其中的一份。求问最少的苹果数。depth=0defmatch(num):””””””globaldepth…

    2022年8月31日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号