回溯法求不等式的所有整数解

2024-01-01 08:52

本文主要是介绍回溯法求不等式的所有整数解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这份代码本来是用来解决这个问题的

但是,修改之后即可用来解决任意多个xi组成的满足不等式的整数解

这里用真代码而不是伪代码来表示

源代码:

#include<iostream>
using namespace std;
const int N=1010;
int p,q,r,goal,n;
int cnt,sum,MIN;
int A[N],t[N],s[5];
int Min(int a,int b,int c)
{int t=a<=b?a:b;return t<=c?t:c;
}
void solve(int k)
{	//i代表x取值 for(int i=0;i<=goal/MIN;i++)//注意i从0开始 {t[cnt++]=i;//		int total=0;
//		for(int j=0;j<cnt;j++) total+=t[j];sum+=s[k]*i;
//		printf("solve(%d),i=%d,sum=%d\n",k,i,sum);
//		printf("几个系数为:");
//		for(int j=0;j<3;j++) printf("%d ",t[j]);
//		printf("\n");if(k!=n)solve(k+1);if(sum<=goal){	
//			printf("----sum<=goal,solve(%d),i=%d,sum=%d,cnt=%d\n",k,i,sum,cnt);for(int j=0;j<3;j++) printf("%d ",t[j]);printf("\n");}
//		printf("solve(%d),i=%d,sum=%d,cnt=%d,执行完毕!\n",k,i,sum,cnt);cnt--;t[cnt]=0;sum-=s[k]*i;//如果i从1开始会导致缺解,只能获得以x1开头的各个解,//而不能获得以x2,x3开头的各个解如(0,3,0),(0,0,5) }
}
int main()
{n=3;cin>>p>>q>>r>>goal;s[1]=p,s[2]=q,s[3]=r;MIN=Min(p,q,r);for(int i=1;i<=goal;i++) A[i]=i;solve(1);return 0;	
} 

运行结果:

可以看到,这些解都是正确的。

现在做简单修改,把输入n和p,q,r的部分修改一下,即可用来解决任意多个自变量xi的不等式

(根据自变量个数修改N的值,如果自变量个数大于原来的N值1010)

注意修改之后s数组下标从1开始,因为这个下标和solve的递归层数(从第一层开始)相关联

	//n=3;//cin>>p>>q>>r>>goal;//s[1]=p,s[2]=q,s[3]=r;cin>>n>>goal;//注意这里下标从1开始,因为这个下标和solve的递归层数(从第一层开始)相关联for(int i=1;i<=n;i++) cin>>s[i];

最后,再把MIN函数修改一下即可

这篇关于回溯法求不等式的所有整数解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/558751

相关文章

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

回溯——9.全排列

力扣题目链接 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 解题思路 问题建模:题目要求给出一个数组的所有排列组合,属于典型的全排列问题,这可以用回溯法来解决。回溯法通过递归的方式,依次将数组中的每个元素放入排列中,直到生成

Collection的所有的方法演示

import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class TestCollection {/*** @param args* Collection的所有的方法演示* 此程序没有使用泛型,所以可以添加任意类型* 以后如果写到泛型会补充这一方面的内容*/public s

Temu官方宣导务必将所有的点位材料进行检测-RSL资质检测

关于饰品类产品合规问题宣导: 产品法规RSL要求 RSL测试是根据REACH法规及附录17的要求进行测试。REACH法规是欧洲一项重要的法规,其中包含许多对化学物质进行限制的规定和高度关注物质。 为了确保珠宝首饰的安全性,欧盟REACH法规规定,珠宝首饰上架各大电商平台前必须进行RSLReport(欧盟禁限用化学物质检测报告)资质认证,以确保产品不含对人体有害的化学物质。 RSL-铅,

单精度浮点数按存储格式转为整数的程序

///#include<cstdio>//-----------------union int_char{unsigned char ch[4];float i;};void out_put(union int_char x)//x86是小端对其模式,即最数据的最低位存储在地址的最低位上。{printf("单精度浮点数值为:%f\n",x.i,x.i);printf("存储位置从左到右

获取所有classpath指定包下类的所有子类

1.问题 开发过程中,有时需要找到所有classpath下,特定包下某个类的所有子类,如何做到? 2. 实现 比较常见的解决方案是自己遍历目录,查找所有.class文件。 下面这个方法使用spring工具类实现,简化过程,不再需要自己遍历目录 /*** 获取在指定包下某个class的所有非抽象子类** @param parentClass 父类* @param packagePat

风控系统之指标回溯,历史数据重跑

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview 回顾 默认你已经看过之前那篇风控系统指标计算/特征提取分析与实现01,Redis、Zset、模版方法。 其中已经介绍了如何利用redis的zset结构完成指标计算,为了方便这篇文章的介绍,还是在正式开始本篇之前回顾一下。 时间窗口 zset

为libpng不同架构创建构建目录、编译、安装以及合并库文件的所有步骤。

好的。既然你已经有了 libpng 的源代码,并且当前处在它的目录下,我们可以简化脚本,不再需要下载和解压源代码这一步。以下是修改后的脚本:```sh#!/bin/bash# 当前目录即 libpng 源代码目录LIBPNG_SRC_DIR=$(pwd)# 设置工作目录WORK_DIR=$(pwd)/libpng_buildBUILD_DIR_X86_64="$WORK_DIR/build

Mybatis logj日志配置问题 以及日志相关的所有问题

使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志。有些时候就不能。 无法输出日志的时候,无论怎么配置log4j,不管是properties的还是xml的,都不起作用。 有些时候,我们没做什么配置就能输出日志.... 这是一个让无数人烦躁的问题。其实解决问题很容易(我过了这么久才解决,以前都用拦截器输出)。 这是一个普大喜奔的日子,让我们一起来看看如何解决mybat