Java求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包动态规划问题求解)
来源:互联网 发布:mac蓝光播放器破解版 编辑:程序博客网 时间:2024/05/06 00:49
输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来。
之前看到有同学写该问题的Java版本,但是照着运行了一下,发现还是存在问题,经过自己的查资料研究,特写出Java版本的正确解答;
该问题初始大概的想法就是:
1)第一种情况,含有n,则递归调用函数求 从1,2,3 到n-1取任意几个数,组成m-n;
2)第二种情况,不含n,则递归调用函数求从1,2,3 到n取任意几个数,组成m;
有了问题的大概想法后,则需要判断特殊条件:
1)如果n大于m,则大于m的数都不能抽取,该问题化为从1,2,3 到m抽取任意几个数组成m;
2)边界值问题,何时为递归的结束条件,分一下三种情况:第一种:m==0&&n>=0,此时应该结束,打印结果,返回;第二种情况:n>=1&&m==1,则直接从n中取1,,压入linkedlist中,打印结果,再pop出1,返回; 第三种情况:n==1&&m>1,则直接返回,该中组合不能构成m;
源代码如下:
import java.util.LinkedList;
public class Dp_Test2 {
private static LinkedList<Integer> list=new LinkedList<Integer>();
/**
* @param args
* 从1 2 3 到n中取任意个数组成m;
*/
static void myPrint(){
for (int i = 0; i < list.size(); i ++)
System.out.print(" "+ list.get(i));
System.out.println();
}
public static void findSum(int sum, int n)
{
if(n>=0&&sum==0){
myPrint();
return;
}
if(n>=1&&sum==1){
list.push(1);
myPrint();
list.pop();
return;
}
if(n==1&&sum>1)
return;
if(sum>=n){
list.push(n);
findSum(sum-n,n-1 );
list.pop();
findSum(sum, n-1);
}else{
findSum(sum, sum);
}
return;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=6;
int m=10;
findSum(m, n);
}
}
- Java求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包动态规划问题求解)
- 编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包问题求解)
- 编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包问题求解)
- 编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包问题求解) .
- 输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来。实际上就是一个背包问题
- 输入两个整数n和m,从数列1,2,3,...,n中随意取几个数,使其和等于m,将其所有可能的组合列出来。 递归求解
- 输入两个整数n和m,从数列1,2,3,...,n中随意取几个数,使其和等于m,将其所有可能的组合列出来。 回溯求解
- 输入两个整数 n 和 m,从数列1,2,3…….n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来
- 输入两个整数n 和 m, 从数列1, 2, 3, ..., n中随意取几个数, 使其和等于m, 要求将所有组合列出来
- 输入两个正整数n和m,从数列1,2,3.......n中随意取几个数,使其和等于m,要求将其中所有的可能组合列出来.编程求解
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来.
- 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来.
- 21.输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- 输入两个整数n和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m,要求将其中所有的可能组合列出来。
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- 每天一点儿Java--抽象类和接口
- VC 获取域名IP
- Sparsity and Some Basics of L1 Regularization
- C#中webbrowser 禁止按shift弹出新IE窗体
- KMP算法
- Java求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包动态规划问题求解)
- Android自定义圆形图片,设置边框
- 学习资源(C++)
- Shell脚本的自学之路---开门篇,简单介绍和使用
- CodeForces 471C - MUH and House of Cards(推导)
- C++中的const修饰符
- 空域滤波
- c#垃圾回收机制
- 进程外COM组件的单实例化和Register-free