zoukankan      html  css  js  c++  java
  • 动态规划------背包问题(c语言)

    /*背包问题:
    背包所能容纳重量为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("
    背包容纳的重量为:%d 背包容纳的总价值为:%d", sum1, sum2);
    
        getch();
        return 0;
    }
  • 相关阅读:
    docker在Linux环境下的安装
    docker在Windows环境下的安装
    tcpdump和windump
    Centos7下安装Elasticsearch 5.6.6
    使用concurrent.futures模块并发,实现进程池、线程池
    Nginx配置Gzip
    linux常用命令
    Linux下文档与目录结构
    快速读取大文件的几种方式
    linux 将大文件分解为多个小文件
  • 原文地址:https://www.cnblogs.com/lin0/p/6493916.html
Copyright © 2011-2022 走看看