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");
}
}
分享到:
相关推荐
罗列数字的全部组合形式,相当于Matlab中的combntns(m,n)。
问号问题要点罗列PPT模板下载。
求组合数并列出所有项,输入要求的字符串
问号问题要点罗列PPT模板
排列组合计算器是一个方便计算排列组合的小工具,解压缩得到exe文件后,直接运行 排列组合计算方法 排列(Pnm(n为下标,m为上标)) 数n的阶乘:n!=n(n-1)(n-2)...2×1 Pnm=n×(n-1)....(n-m 1);Pnm=n!/(n-m...
罗列图标带字.rar
展会常见问题罗列.doc
文档罗列了一些计算机面试当中的很多典型事例,很多都是课本中不常见或者不常用但却又是非常经典的代表性问题!
js 实现 罗列对象的属性和值! 值得下载看看!资源免费,大家分享!!
实用圆形并列罗列PPT图形.pptx
提供组合的算法的实现, 分析思路. 主要内容: 罗列所有6位数的组合情况, n位数任取m个数的组合
功能不逊于JAVA输入数字(复杂版),简单一个类,判断输入是否为数字,如果不是则禁止输入(不提示)!
罗列IP地址的一个应用(VC)
文件板夹项目罗列PPT模板
总项分项罗列说明PPT模板下载。
五项并列罗列PPT图形素材下载。
树形三项项目罗列PPT图形.pptx
针对遥感数字图像处理的三大内容(质量...本书特别强调从图像含义的角度来理解遥感数字图像处理各种算法的物理意义,因此本书尽量避免数学公式的罗列与推导,而是借助生活中一些通俗易懂的案例来引导读者理解各种算法。
windows系统自动罗列各级目录下的文件名(树形罗列)