利用穷举法解决组合问题,背包问题,变量相等问题

算法:用穷举法求解0-1背包问题(很简洁的方法) 用穷举法求解0-1背包问题 阅读详情




/* 利用穷举法解决组合问题
   求n个自然数中r个数的组合,这里假设r=3. 
   例:如果n=3,则结果为:
     4  3  2
      4  3  1
     4  2  1
      3  2  1    
*/

#include 
"stdio.h"
main()
{
    
int i,j,k,n;
    
    FILE 
*
fp;
    
if((fp=fopen("QingJu1.txt","wb"))==
NULL)
    {
        printf(
"cannot open file "
);
        
return
;    
    }
    
    printf(
"please input n:"
);
    scanf(
"%d",&
n);
    
for(i=n;i>=3;i--
)
        
for(j=n-1;j>=2;j--
)
            
for(k=j-1;k>=1;k--
)
                
if((i!=j) && (j!=k) && (i!=k) && (i>j) && (j>
k)) 
                {           
                    printf(
"%3d%3d%3d ",i,j,k);        /*屏幕显示*/

                    fprintf(fp,
"%3d%3d%3d ",i,j,k);  /*存到文件*/                   
                }              
}



/*  利用穷举法背包问题
    有不同价值,不同重量的物品n件,从中选一部分物品的选择方案.
    要求选中物品的总重量不超过指定的限制重量,但选中的物品价值之和最大.
    
    例:如果n=4,限制重量tw=7
    4个物品的重量:1 2 3    4
    4个物品的价值:4 3 2    1
    则最佳选择:   1 1 1 0(1代表选择,0代表未选择)
    则最大价值为:4+3+2=9,此时重量w=1+2+3=7<7  
*/

#include 
"stdio.h"
#include 
"math.h"
#define MAX 100
/* 对n个物品,有2的n次方个选择组合,化为2进制的目的,
   是让每一个二进制位1,0代表这个物品是否被选择
*/

conversion(
int n,int b[MAX])
{
    
int
 i;
    
for(i=0;i<MAX;i++
)
    {
        b[i]
=n%2
;
        n
=n/2
;
        
if(n==0) break
;
    }
}
main()
{
    
int
 i,j,n,b[MAX],temp[MAX];
    
float
 tw,maxv,w[MAX],v[MAX],temp_w,temp_v;
    printf(
"please input n:");  scanf("%d",&n);        /*输入物品数*/

    printf(
"please input tw:"); scanf("%f",&tw);    /*输入限制重量*/
    
for(i=0;i<n;i++)
    {
        printf(
"please input the values of w[%d]:",i);/*输入各物品的重量*/

        scanf(
"%f",&w[i]);
    }
    
for(i=0;i<n;i++
)
    {
        printf(
"please input the values of v[%d]:",i);/*输入个物品的价值*/

        scanf(
"%f",&v[i]);
    }
    maxv
=0
;
    
for(j=0;j<n;j++
)
    {
        b[j]
=0
;
        temp[j]
=0
;
    }
    
for(i=0;i<pow(2,n);i++)                /*穷举所有可能选择,找出最优选择*/

    {
        conversion(i,b);
        temp_w
=0;
        temp_v
=0
;
        
for(j=0;j<n;j++)                /*循环判断当前选择是否符合最优选择*/

            
if(b[j]==1)
            {
                temp_w
=temp_w+
w[j];
                temp_v
=temp_v+
v[j];
            }
        
if((temp_w<=tw)&&(temp_v>
maxv))
        {
            maxv
=
temp_v;
            
for(j=0;j<n;j++
)
                temp[j]
=
b[j];
        }
    }
    printf(
"the max values is %f: ",maxv); /*输出最大价值*/

    printf(
"the selection is: ");
    
for(j=0;j<n;j++
)
        printf(
"%d",temp[j]);                /*哪个物品被选择*/

}


/* 利用穷举法解决变量相等问题
   1-6的6个整数组成一个3角形.每个边含顶点有3个数,要求三边相等的所有组合.
   例:以下三边组合
      a=1 b=6 c=3
      c=3 d=2 e=5
      e=5 f=4 a=1
*/

#include 
"stdio.h"
main()
{
   
int a,b,c,d,e,f;
   
for(a=1;a<=6;a++
)
      
for(b=1;b<=6;b++
)
      {
         
if(b==a) continue
;
         
for(c=1;c<=6;c++
)
         {
             
if((c==a)||(c==b)) continue
;
             
for(d=1;d<=6;d++
)
             {
                 
if((d==a) || (d==b) || (d==c)) continue
;
                 
for(e=1;e<=6;e++
)
                 {
                     
if((e==a)||(e==b)||(e==c)||(e==d)) continue
;
                     f
=21-(a+b+c+d+
e);                     
                     
if((a+b+c==c+d+e) && (a+b+c)==(a+e+f))    /*判断3个边是否相等*/
                     
                       printf(
"a=%-4d b=%-4d c=%-4d d=%-4d e=%-4d f=%-4d "
,a,b,c,d,e,f);                     
                 }
             }
         }                  
      }
}



 

01背包问题穷举法 穷举法解决背包问题,想要资源的一看题目就知道,不需要多花字数来介绍 立即下载

相关推荐

背包问题的贪心法C语言实现

为C语言课程设计写的基于贪心法的背包问题,包含全部4种贪心策略

0-1背包问题——穷举法+二维dp数组+回溯(java)

穷举法:每件物品装还是不装有两种选择,使用0-表示不装,1表示装,n件物品就有2^n种,穷举2^n种,找到符合符合weight背包容量的且为价值最大的方式。因此dp[i][w]取装物品 i dp[i-1][w-wt[i-1]]+val[i-1] 和 不装物品i dp[i-1][w] 的。dp[i][w]数组含义:对于前i个物品,当前背包容量为w时,可装下的最大值是dp[i][w]。dp[i-1][w-wt[i-1]]+val[i-1]:装物品i的价值。dp[i-1][w]:不装物品i的价值。

weixin_63541561的博客 1242

C语言中使用穷举法的一些算法

C语言中使用穷举法的一些算法C语言中使用穷举法的一些算法

01背包问题穷举法,暴力破解法(穷举法)递归

穷举法解决01背包利用暴力破解法(穷举法) 问题描述:给定n个重量为{w1, w2, … ,wn}、价值为{v1, v2, … ,vn}的物品和一个容量为C的背包,求这些物品中的一个最有价值的子集,且要能够装到背包中。 包的总容量 物品编号 价值 重量 1 4$ 12kg 2 2$ 2kg 3 2$ 1kg 4 1$ 1kg 5 10$ 4kg 思路: 利用递归进行遍历求出各个的可能性 将遍历出的结果存入int[] back = new int[N],进行缓存 没存入一

qq_44236958的博客 5089

贪心算法 背包问题 c语言

贪心算法 背包问题 c语言 绝对无误 运行成功

标准高斯过程回归(Gaussian Processes Regression, GPR)从零开始,公式推导

标准高斯过程回归从零开始公式推导

qq_43587949的博客 1万+

穷举法解决0-1背包问题

穷举法是将所有的候选解按某种顺序进行逐一枚举和检验,并从中找出符合要求的候选解作为问题的解,是一种暴力解法,算法思路简单,但复杂度高,一般用于数据量小的情况。 下面利用穷举法解决0-1背包问题: [0-1背包问题] 有一个背包,背包容量是M=150kg。有7个物品,物品不可以分割成任意大小。 要求:尽可能让装入背包中的物品总价值最大,但不能超过总容量。 物品 A B ...

简之的通向技术之路 8638

散户逆袭神器:用通达信DIY指数发现下一个光伏储能(附龙头股筛选模板)

本文详细介绍了如何利用通达信软件的自定义指数功能,构建个人专属的行业监控工具,以发现类似光伏储能这样的潜力赛道。文章提供了从零开始的指数编制步骤、核心的龙头股筛选模板,以及五个关键的数据校验技巧,帮助散户投资者实现机构级的行业分析与机会挖掘,有效提升投资决策能力。

w3x4y的博客 483

背包问题之穷举法

    最近复习了一下算法,觉得背包问题最具代表性。可以用大多数通用的算法(穷举,动规,回溯,分枝限界)来解决。因此将最近的笔记整理一下,发到自己的博客上。                 问题描述:背包的容量为C,现有N件物品,价格分别为p[0],p[1]......p[n-1].重量分别为:w[0],w[1]......w[n-1].从N件物品中选择任意个放入背包中,使得物体的价值最大

liangneo的专栏 8430

抖音用户主页视频数据爬虫详解(点赞,收藏,分享等)

的包中有个max_cursor参数,请求载荷中也有一个这样的参数,每次请求的数据中max_cursor是下一个请求的载荷,,,同时has_more为1时候代表还能请求,0为不能请求,我们做如下判断。最后发现cookie很容易过期,批量爬取有点困难,,,,我们采用drissoinpage进行自动化获取。首先进行抓包分析,,,随便找个主页,f12,关键词搜索,发现这个包是以post开头。请你第一次运行先按0,进行登录(或者触发反爬的时候),登录完成之后,按1进行爬取,完整代码请在知识星球。

m0_74823507的博客 3430

YOLOv10注意力革新:小波域注意力(WDA)如何实现多尺度特征精准聚焦

本文深入解析YOLOv10中的小波域注意力(WDA)机制,探讨其如何通过频域分解与动态聚焦实现多尺度特征精准提取。WDA模块结合离散小波变换与注意力机制,显著提升小目标检测性能,在VisDrone数据集上AP提升达12.6%。文章详细介绍了两种集成方案及代码实现,为计算机视觉开发者提供实用指南。

weixin_29079671的博客 253

常用算法 --- 穷举搜索法

穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解

海阔天空的专栏 1831

Windows下QT5.15.2安装MQTT模块全攻略(附分支选择避坑指南)

本文详细介绍了在Windows环境下为QT5.15.2安装MQTT模块的完整流程,包括环境准备、源码获取、编译配置及项目集成等关键步骤。特别针对分支选择、依赖项处理和常见错误提供了实用解决方案,帮助开发者高效完成MQTT模块的安装与调试,适用于物联网开发场景。

weixin_29224589的博客 466

穷举搜索法

二、穷举搜索法 穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。 【问题】 将A、B、C、D、E、F这六个变量排成如图所示的三角形,这六个变量分别取[1,6]上的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。如图就是一个解。 程序引入变量a、b、c、d、e、f,并让它们分别顺序取1至6的证书,在它们互不相同的条件

西北偏北 714

LMX2595实战:手把手教你配置JESD204B时钟与SYSREF(含相位同步避坑指南)

本文详细介绍了LMX2595在JESD204B时钟系统中的配置与优化方法,包括时钟系统架构设计、相位同步配置、SYSREF生成技巧以及PCB布局规范。通过实战案例和避坑指南,帮助工程师充分发挥LMX2595的超低相位噪声和抖动性能,确保高速数据转换器系统的稳定性和同步精度。

weixin_29206669的博客 478

【异常】安装hermes-agent提示Git克隆仓库网络中断 fetch-pack: unexpected disconnect while reading sideband packet

本文分析了Git克隆仓库时出现网络中断错误的常见原因及解决方案。报错表现为连接被远程主机关闭、管道破裂或数据包意外终止,通常由网络不稳定、仓库过大或配置不当引起。提供了5种优先级排序的解决方法:1)使用浅克隆减少数据量;2)优化Git配置参数;3)切换网络或配置代理;4)检查SSH密钥设置;5)改用HTTPS方式克隆。特别推荐先尝试「浅克隆+HTTPS」组合方案快速验证,若问题持续再根据具体报错深入排查。文中包含详细的命令示例和配置说明,适合不同网络环境下的Git用户参考。

奶爸的编程之路,也就一周冷个三天 1420

常用算法设计方法(2)——穷举搜索法

二、穷举搜索法      穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。 【问题】   将A、B、C、D、E、F这六个变量排成如图所示的三角形,这六个变量分别取[1,6]上的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。如图就是一个解。 程序引入变量a、b、c、d、e、f,并让它们分别顺序取1至6的证书,在它们互不相同的条

求索 1192

基于 PID 算法的 STM32 步进电机高精度位置控制系统设计与实现(工业自动化应用)

硬件层面:选用 STM32F103C8T6+A4988 + 欧姆龙编码器的组合,兼顾工业可靠性与成本,接线需注意强弱电分离和信号抗干扰;软件层面:核心为位置式 PID 闭环控制,Mermaid 流程图清晰展现 “采集 - 运算 - 驱动” 的闭环逻辑,代码模块化易移植;性能层面:无负载定位误差≤±1 脉冲,带载误差≤±3 脉冲,满足工业自动化高精度位置控制需求。

weixin_42300449的博客 194

常用算法设计方法(二) --- 穷举搜索法

  穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。 【问题】   将A、B、C、D、E、F这六个变量排成如图所示的三角形,这六个变量分别取[1,6]上的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。如图就是一个解。 程序引入变量a、b、c、d、e、f,并让它们分别顺序取1至6的证书,在它们互不相同的条件下,测试由它们排成的

jia_xiaoxin的专栏 839

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

常用算法设计方法之穷举搜索法

穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。&lt;o:p&gt;&lt;/o:p&gt;【问题】   将A、B、C、D、E、F这六个变量排成如图所示的三角形,这六个变量分别取[1,6]上的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。如图就是一个解。&lt;o:p&gt;&lt;/o:p&gt;程序引入变量a、b、c、...

hdy007 294

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

二、穷举搜索法

穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。 【问题】 将A、B、C、D、E、F这六个变量排成如图所示的三角形,这六个变量分别取[1,6]上的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。如图就是一个解。 程序引入变量a、b、c、d、e、f,并让它们分别顺序取1至6的证书,在它们互不相同的条件下,测试...

weixin_30266885的博客 468

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

算法设计方法 - 穷举搜索法

穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。 【问题】   将A、B、C、D、E、F这六个变量排成如图所示的三角形,这六个变量分别取[1,6]上的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。如图就是一个解。 程序引入变量a、b、c、d、e、f,并让它们分别顺序取1至6的证书,在它们互不相同的条件下,测试由它们排成的如图

上海夜未眠 1075

穷举

穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。 【问题】将A、B、C、D、E、F这六个变量排成如图所示的三角形,这六个变量分别取[1,6]上的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。如图就是一个解。 程序引入变量a、b、c、d、e、f,并让它们分别顺序取1至6的证书,在它们互不相同的条件下,测...

123
上一篇: 利用递推法求最小数生成问题,求阶乘问题
下一篇: 重载只与参数类型和个数有关.若有多个参数且参数类型不同,则此时参数顺序不同也属重载
aspnet2002web
博客等级 码龄21年 482粉丝 310原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值