IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C语言【微项目09】—背包问题0/1[用二进制逐次加一生成集合子集](采用蛮力法实现)【2021-11-24】 -> 正文阅读

[数据结构与算法]C语言【微项目09】—背包问题0/1[用二进制逐次加一生成集合子集](采用蛮力法实现)【2021-11-24】

C语言【微项目09】—背包问题0/1[用二进制逐次加一生成集合子集](采用蛮力法实现)【2021-11-24】


【TDTX】

FMethodPackage.c

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
    int n,fz;
    int i,j;
    printf("输入物品个数和背包负重(n fz):"); 
    scanf("%d %d",&n,&fz);
    int a[n][2];//C99
    
    printf("输入重量和价值:\n"); 
    for(i = 0;i < n;i++)
    {
        scanf("%d %d",&a[i][0],&a[i][1]);
        //printf("%d %d\n",a[i][0],a[i][1]);
    }
    
    int size = (int)pow(2,n);
    int** ls = (int**)malloc(sizeof(int*)*size);//创建一个指针数组,每个元素可以指向一个int*类型 
	for(i = 0;i < size;i++)
	{
		ls[i] = (int*)malloc(sizeof(int)*n);//将每个元素指向分配的一维数组 
	}
    
    for(i = 0;i < size;i++)
    {
    	//生成集合的全部子集 
    	int t;
        for(t = i,j = n-1;j >= 0;j--)
        {
            if(t == 0)
            {
                ls[i][j] = 0;
                continue;
            }
            ls[i][j] = t % 2;
            t = t / 2;
        }
    }

//下面代码用于检查所有的组合,即重量组合的全部0/1标记子集 
//    for(i = 0;i < size;i++)
//    {
//        for(j = 0;j < n;j++)
//        {
//            printf("%d ",ls[i][j]);
//        }
//        puts("");
//    }

    int w = 0;
    int v = 0;
    int maxv = 0;
    int gw = 0;
    int flag = -1;
    for(i = 0;i < size;i++)
    {
        for(w = 0,v = 0,j = 0;j < n;j++)
        {
            if(w < fz)
            {
                if(ls[i][j] == 1)
                {
                     w = w + a[j][0];
                     v = v + a[j][1];
                }
            }
            else
            {
                break;
            }
        }
        if(maxv < v && w <= fz)
        {
            maxv = v;
            flag = i;
            gw = w;

        }
    }
    printf("重量:\t");
    for(i = 0;i < n;i++)
    {
    	printf("%-5d",a[i][0]);
	}
    puts("");
    
    printf("价值:\t");
    for(i = 0;i < n;i++)
    {
    	printf("%-5d",a[i][1]);
	}
    puts("");
    
    printf("组合:\t");
    for(i = 0;i < n;i++)
    {
    	printf("%-5d",ls[flag][i]);
	}
    printf("\n最佳重量:%d,最大价值:%d",gw,maxv);
    
    return 0;
}

运行结果示例

1.5个物品,负重15

数据:
5 15
12 4
2 2
1 1
4 10
1 2
在这里插入图片描述

2.20个物品,负重200

数据:
20 200
24 50
42 60
20 49
7 15
48 115
4 11
3 8
7 5
52 66
50 25
5 8
9 25
14 40
9 22
55 42
40 30
35 49
33 16
12 12
65 127
在这里插入图片描述


------------------------------------------------------第九次发项目类文章有点激动啊!-----------------------------------------------------
-----------------------------------------------------【C语言—微项目—自编练习】----------------------------------------------------------
----------------------------------------------------------------【TDTX】--------------------------------------------------------------------------

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:22:35  更:2021-11-25 08:23:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 16:14:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码