`
623deyingxiong
  • 浏览: 190382 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

组合问题 之 罗列特定和的数字组合方式

阅读更多
package com.test.algorithm.dp;

import java.util.HashSet;
import java.util.Set;

/**
 * @author hawkinswang
 *
 *         01背包问题:在指定数组中挑选任意组合,让它们的和等于一个特定值,列出所有组合方式
 *         使用动态规划方法解决,状态转移方程:dp[i][j]=dp[i-arr[j]][j-1].add(arr[j])
 *
 */
public class FindComineEqualSum {
    public static void main(String[] args) {
	int[] arr = { 1, 3, 5, 7, 8, 9, 10, 2, 4, 6 };
	int sum = 11;

	Set<String> combines = findCombine(arr, sum);

	for (String combine : combines) {
	    if (combine != null) {
		System.out.println("the result is:" + combine);
	    }
	}
    }

    private static Set<String> findCombine(int[] arr, int sum) {
	Set<String> result = new HashSet<String>();
	Set<String>[][] dp = new HashSet[sum + 1][arr.length + 1];
	int i = 0, j = 0;
	for (j = 0; j < arr.length + 1; j++) {// 当求和为0时,初始化为"";非常重要,这是动态规划数组产生合理组合的基础.
	    dp[0][j] = new HashSet<String>();
	    dp[0][j].add("");
	}

	for (i = 1; i <= sum; i++) {
	    for (j = 1; j <= arr.length; j++) {
		for (int k = 0; k <= j - 1; k++) {
		    if (dp[i][k] != null && dp[i][k].size() > 0) {
			if (dp[i][j] == null) {
			    dp[i][j] = new HashSet<String>();
			}
			dp[i][j].addAll(new HashSet<String>(dp[i][k]));
		    }
		}

		if (i >= arr[j - 1] && dp[i - arr[j - 1]][j - 1] != null) {
		    if (dp[i][j] == null) {
			dp[i][j] = new HashSet<String>();
		    }

		    for (String str : dp[i - arr[j - 1]][j - 1]) {
			dp[i][j].add(str + "," + arr[j - 1]);
		    }
		}
	    }

	    // readArray(dp);
	}

	for (Set<String> Set : dp[sum]) {
	    if (Set != null) {
		result.addAll(Set);
	    }
	}

	return result;
    }

    private static void readArray(String[][] dp) {
	for (String[] arr : dp) {
	    for (String str : arr) {
		System.out.print(str + "/");
	    }
	    System.out.println();
	}
	System.out.println("end");

    }

}
分享到:
评论

相关推荐

    数字电子技术:第3章组合逻辑电路.ppt

    组合逻辑电路的设计不仅限于一些特定的应用场景,它还是更复杂数字系统的基础。掌握组合逻辑电路的基本分析和设计技能,有助于深入理解和应用数字电子技术,在设计更高级的电子系统时也能够更加游刃有余。通过本章的...

    部编版第十二周 简单列举.doc

    当存在特定的限制条件时,如例题4中的数字之和必须大于8,我们需要在罗列过程中注意这些条件,按一定的顺序进行,避免重复和遗漏。 5. **循环赛问题**: 例题5讨论的是循环赛的场次计算。在循环赛中,每个队伍都...

    ”排列问题“课件.ppt

    通过对排列问题的学习和应用,我们不仅能够掌握解决实际问题的数学工具,还能够在解决问题的过程中培养和提高我们的思维能力。对于学生来说,理解和掌握排列问题的解决方法,无疑将为他们未来的学习和研究打下坚实的...

    数电期末复习罗列知识点以及例题

    在准备数字电子技术(数电)的期末复习时,我们需要关注多个关键知识点和例题,以便有效备考。以下是对这些内容的详细解析: 一、数选器与奇偶校验电路设计 4选1数选器74LS153可以用于实现奇偶校验电路。奇偶校验...

    部编版第38周 最大最小问题.doc

    例如,例题1中要求在图形中填入数字,使得每边7个小三角形内数字之和相等,并求最大和。我们可以通过观察和分析,将最小的数填在中心位置,最大的数填在角上,以此类推,逐步构建出满足条件的最大和。 例题2中涉及...

    2013青岛版二年级上学期智慧广场——分类列举-2.ppt

    通过学习这一方法,学生能够系统地罗列出所有可能的情况,进而在解决问题时做到既不遗漏也不重复。本文以“2013青岛版二年级上学期智慧广场——分类列举-2.ppt”为依托,深入探讨分类列举法在数学教育中的重要性及其...

    数字电子技术基础 第四版

    - **设计简单的数字电路**:通过已知逻辑函数式,可以设计出对应的逻辑电路,实现特定的逻辑运算功能。 - **数字系统分析**:在分析数字系统时,能够将逻辑函数转换为真值表,进而分析系统的逻辑行为。 - **软件仿真...

    认识人民币——解决问题PPT学习教案.pptx

    通过实际的购物问题,比如如何用19元去购买玩具,孩子们不仅需要找出特定金额的组合,还要理解“哪些”意味着所有可能的组合。这种开放式的问题设计,极大地锻炼了孩子们的逻辑思维和综合应用能力。 为了进一步巩固...

    2018年秋九年级数学上册第4章等可能条件下的概率4.2等可能条件下的概率一第2课时画树状图法练习新版苏科版

    在初中数学的学习中,概率问题一直是学生挑战的重点之一。特别是在处理等可能条件下的概率时,画树状图法是一种非常有效的解决问题的方法。这种方法能够帮助学生清晰地罗列所有可能的情况,并且能够系统地计算出特定...

    部编版第32周 算式谜.doc

    数位填充问题同样重要,它要求解题者在特定的条件下考虑数字在不同位置上的组合。这通常出现在需要满足横行和竖行的和相等,或者数字的乘积相等的情况中。 数字填充策略的运用,不仅需要考虑数字的运算特性,还需...

    罗克韦尔 Bulletin 800F简易样本.pdf

    例如,“FP”代表某种型号的按钮开关,后续的字母和数字组合则标识着具体的尺寸、安装方式、电压等级和电气特性等。在工业自动化的开关选型中,以下几个关键知识点是非常重要的: 1. 开关类型:用户需要根据实际...

    专转本计算机选择题集锦.pdf

    11. 题目61至65中出现了各种数字组合和字母,但无法从片段中明确判断具体的考察内容。 12. 题目67和68中出现了10EH和10DH,这些可能是十六进制数表示的数字,通常用在内存地址或某些寄存器的表示上。 13. 题目70至...

    设备考察报告3篇.pdf

    此外,文档中提到的一些符号和数字的组合,如“80%”、“24(911)”等,很可能是表示某种状态的百分比或与紧急事件相关的代码,例如与911相关的代码可能表示紧急状态或紧急服务的联系方式。而“P12Phoenix”、“P***%...

    六年级数学上册 入学模拟试题及分析十六 青岛版

    学生通过给出的数字和条件,推断出序列中特定位置的数值。这类题目不仅考验学生的逻辑推理能力,也帮助他们深入理解数字的性质和规则。 #### 不等式与整数解的寻找 不等式和整数解的寻找是高年级数学中较为复杂的...

    Number-theoretic-Methods-in-Statistics 作者:K.-T. FANG

    6. 计算数论:研究数字计算中的问题,特别是在大整数的因式分解、素数检验和计算模算术中,这在密码学和现代统计方法中尤其重要。 7. 组合数学:数论与组合数学有着密切的联系,组合设计和有限几何等领域都可能受益...

    LINGO使用教程(对数学建模的学生很有用)

    这里,`John`、`Jill`等是`students`集的成员,而`1`和`0`分别代表男性和女性,数字代表年龄。 ##### 3.3 注释 使用感叹号(!)开始的行被视为注释行,可以在代码中添加说明文字,如: ```lingo ! 集部分; sets: ...

    多层板PCB设计参考

    例如,在双面板设计中,设计师可以参考文档中列举的不同厚度和材料组合,这些结构通常以诸如“50/100 || 0.5mm”这样的形式表达,表示铜箔厚度为50微米和100微米,以及层与层之间的介质厚度为0.5毫米。在实际设计中...

    2021年威海地区陆路运输主管岗位薪酬水平报告-最新数据.pdf

    报告中罗列的数字和百分比,涵盖了从P25到P90的薪资百分位数,以及中位数和不同所有制类型企业的薪酬数据。我们了解到,威海地区陆路运输主管的薪酬水平在不同企业类型中存在差异,包括外商独资企业、合资企业、当地...

    西门子_NRAQ.E75310 Programmable Controllers.pdf

    ADM模块集成了模拟和数字信号的处理,以更高效地解决工业自动化中的复杂问题。机器人控制器(CHASU-N)则是用于机器人的运动控制,确保机器人的精确操作和运动协调。 输入输出模块(I/O Modules)用于连接和处理...

Global site tag (gtag.js) - Google Analytics