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

算法:用穷举法求解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语言 绝对无误 运行成功

如何根据芯片手册时序图编写驱动程序

如何根据芯片手册时序图编写驱动程序 对于电子开发者来说,刚刚拿到一个芯片,常用的芯片可以参考网上的例程来做深入了解,对于一个不常用的芯片来说,Datasheet几乎是使用芯片的唯一的资料,所以根据Datasheet时序图写出对应的驱动程序就尤为重要。 本文根据一个简单的例子来阐述根据时序图来编写对应的程序过程。旨在讲解对于初学者应该怎么利用芯片的时序图编写符合要求的底层驱动程序(老鸟请跳过)。 下载芯片的Datasheet,(个人常用http://www.21icsearch.com/)如..

weixin_36447711的博客 1万+

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

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

简之的通向技术之路 8638

【Qualcomm高通音频】如何封装音频控件?

音频代码涉及面很广,这篇文档介绍如何封装音频控件给HAL层使用。这里以AW87519芯片调试为例进行介绍封装音频控件和使用的方法。在最初接出到高通音频基础功能调试的时候,都是从tinyalsa指令/mixer_paths文件配置开始。因为单独一个音频设备的调试,都对应一条音频链路的打通。比如以下链接上高通平台基础音频输入输出设备调试: 【Qualcomm音频】Speaker 调试记录http...

crow_ch的博客 1955

背包问题之穷举法

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

liangneo的专栏 8430

SpringBoot+VUE3实战:如何用WebSocket搞定网页端语音通话(避坑指南)

本文详细介绍了如何使用SpringBoot和VUE3结合WebSocket技术实现网页端语音通话功能。从环境配置、WebSocket服务端实现到前端音频处理,提供了完整的开发指南和避坑建议,帮助开发者快速构建稳定高效的实时语音通信系统。

weixin_29021195的博客 221

Bentley ORD(openroads designer) 二次开发(BIM)第七节 在ORD SDK中调用MicroStation SDK

从课程刚开始的时候我们就通过学习,了解了ORD的开发是基于MicroStation的,ORD SDK的接口发布的时候也对MicroStation SDK也做了一次发布。这一章将以我们对ORD SDK知识的了解为基础,使用ORD SDK的接口读取道路几何信息、计算桩号,然后再使用MicroStation SDK 读取地形数据和计算投影点的位置,并创建一组方柱形状的Soild。计算方柱底部坐标要经过两大步骤,通过路线的桩号及偏移距离去定位方柱的平面位置,通过方柱的平面位置计算数字地面模型上的投影点的坐标。

chen286990651的博客 881

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

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

海阔天空的专栏 1831

SAP 经营范围(Operating Concern) 和业务范围 (Business Area) 在核算架构或是管理架构中的区别和联系分别是什么 请给具体的示例

摘要:SAP系统中,业务范围(Business Area)和经营范围(Operating Concern)在核算架构中具有不同功能。业务范围是FI/CO共用维度,用于跨公司码的业务线核算(如电子产品、机械设备),支持内部管理和简单对外报表。经营范围则是CO-PA专属维度,聚焦获利能力分析,可细化到产品+客户+区域组合(如分析手机在华东区域的获利情况)。两者存在层级关联:经营范围包含业务范围作为基础维度,业务范围数据会传递至经营范围进行深度分析。实际应用中需先配置业务范围,再设置经营范围并关联相关维度,共同支

金牌架构师 96

穷举搜索法

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

西北偏北 714

从DDPM到DDIM:深入解读《Denoising Diffusion Implicit Models》

DDIM发表在ICRL2021上,是DDPM重要的改进之一,能显著提高DDPM的样本质量、减少采样时间,并且能显式控制插值,已经被广泛应用到现在的Diffusion Models上。这篇博客和大家一起详细解读一下DDIM,认识这一伟大的模型。.........

沉迷单车的追风少年 1万+

CodeX 登录报错 os error 10013?一键修复 CodeX 无法登录问题(亲测有效)

CodeX 登录时报 os error 10013?本文提供快速修复方案,实测有效,彻底解决登录报错:登录失败:failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013)的问题💡

XiaoqiangClub的博客 2933

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

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

求索 1192

C#实现低通和高通滤波算法

低通滤波器允许通过低于某个截止频率的信号成分,并且抑制高于该频率的成分。而高通滤波器则允许通过高于某个截止频率的信号成分,并抑制低于该频率的成分。巴特沃斯滤波器是一种对称的滤波器,具有平坦的幅度响应和最小的群延迟。低通和高通滤波是数字信号处理中常用的滤波技术,用于滤除或增强信号中的特定频率成分。在本篇文章中,我们将使用C#编程语言来实现低通和高通滤波算法。以上就是使用C#实现低通和高通滤波算法的示例代码。你可以根据自己的需求调整截止频率和采样率,将这些代码应用于你的项目中。是滤波器的截止频率,

XisVisual_Basic的博客 1275

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

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

jia_xiaoxin的专栏 839

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

二、穷举搜索法

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

weixin_30266885的博客 468

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。 【问题】   将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、付费专栏及课程。

余额充值