背包问题就是包要满,但是01背包允许包不满

一,题目:输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来。

二,解释:比如输入m=4  n=4 则输出为:4

1+3   而2+2不正确,因为重复输出数字了

中心思想:1)如果1+2+3+……+n<m 则不存在这个数

2)如果m<n 则应该让n=m //因为m--->n之间的数都已经大于m了 没必要再计算了

3)如果m=n 输出n

4)如果m>n   递归循环

源码采用原型:0-1背包问题

参考博客:http://blog.csdn.net/tianshuai11/article/details/7025464

三,源码:(类似源码五)

#include<list>

[html] view plaincopyprint?
  1. #include<iostream>
  2. using namespace std;
  3. list<int> list1;
  4. void find_factor(int sum, int n)
  5. {
  6. // 递归出口
  7. if(n <= 0 || sum <= 0)
  8. return;
  9. // 输出找到的结果
  10. if(sum == n)
  11. {
  12. // 反转list
  13. list1.reverse();
  14. for(list<int>::iterator iter = list1.begin(); iter != list1.end(); iter++)
  15. cout << *iter << " + ";
  16. cout << n << endl;
  17. list1.reverse();
  18. }
  19. list1.push_front(n);      //典型的01背包问题
  20. find_factor(sum-n, n-1);   //放n,n-1个数填满sum-n
  21. list1.pop_front();
  22. find_factor(sum, n-1);     //不放n,n-1个数填满sum
  23. }
  24. int main()
  25. {
  26. int sum, n;
  27. cout << "请输入你要等于多少的数值sum:" << endl;
  28. cin >> sum;
  29. cout << "请输入你要从1.....n数列中取值的n:" << endl;
  30. cin >> n;
  31. cout << "所有可能的序列,如下:" << endl;
  32. find_factor(sum,n);
  33. return 0;
  34. }
#include<iostream>
using namespace std;
list<int> list1;
void find_factor(int sum, int n)
{
// 递归出口
if(n <= 0 || sum <= 0)
return;
// 输出找到的结果
if(sum == n)
{
// 反转list
list1.reverse();
for(list<int>::iterator iter = list1.begin(); iter != list1.end(); iter++)
cout << *iter << " + ";
cout << n << endl;
list1.reverse();
}
list1.push_front(n);      //典型的01背包问题
find_factor(sum-n, n-1);   //放n,n-1个数填满sum-n
list1.pop_front();
find_factor(sum, n-1);     //不放n,n-1个数填满sum
}
int main()
{
int sum, n;
cout << "请输入你要等于多少的数值sum:" << endl;
cin >> sum;
cout << "请输入你要从1.....n数列中取值的n:" << endl;
cin >> n;
cout << "所有可能的序列,如下:" << endl;
find_factor(sum,n);
return 0;
}  

中兴面试题 01背包问题相关推荐

  1. 程序员的算法课(7)-01背包问题

    一.01背包问题描述 有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? i 1 2 3 4 w(体积) 2 3 4 5 v(价值) 3 4 5 6 ...

  2. 0-1背包问题及变种

    0-1背包问题: 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 这个问题的特点是:每种物品只 ...

  3. ACM1881 01背包问题应用

    01背包问题动态规划应用 acm1881毕业bg 将必须离开的时间限制看作背包容量,先将他们由小到大排序,然后在排完序的数组中对每个实例都从它的时间限制开始(背包容量)到它的延长时间进行遍历: 1 # ...

  4. c语言-01背包问题

    01背包问题 问题:有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 分析: 这是最基础的背包问题,特点是:每种物品仅有一件,可以选 ...

  5. 三十四、动态规划解决01背包问题

    一.动态规划算法介绍 动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步一步获取最优解的处理算法. 动态规划算法与分治算法类似,其基本思想是将待求解的问题分解成若干个子问题,先求子问题, ...

  6. python 回溯法 子集树模板 系列 —— 3、0-1背包问题

    问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大? 分析 显然,放入背包的物品,是N个物品的所有子集的其 ...

  7. poj3624 Charm Bracelet DP 01背包问题

    题目链接:http://poj.org/problem?id=3624 01背包问题,接触DP的第一题. 1 ///2014.4.10 2 ///poj3624 3 4 #include <io ...

  8. 【基础算法复习】01背包问题(一)

    一.绪论 01背包问题是一个经典的动态规划问题,问题描述为"有n个物品,其价值分别为v[n],要求将其装在承重为m的背包,每个物品只能装一次的情况下,在不超过承重的范围下价值最大" ...

  9. C++~回溯+贪心法解决01背包问题

    C++~回溯+贪心法解决01背包问题 参考文章: (1)C++~回溯+贪心法解决01背包问题 (2)https://www.cnblogs.com/rimochiko/p/8168638.html 备 ...

  10. python【力扣LeetCode算法题库】面试题 01.07- 旋转矩阵

    面试题 01.07. 旋转矩阵 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节.请你设计一种算法,将图像旋转 90 度. 不占用额外内存空间能否做到? 示例 1: 给定 mat ...

最新文章

  1. 陈彦铭_盆栽(陈彦铭)
  2. 剑指offer十:矩形覆盖
  3. greenplum 安装笔记
  4. linux--监控系统之Zabbix简介(二)
  5. Python 学习笔记12 类 - 使用类和实例
  6. 怎么获取当前页面的URL
  7. 昂达平板装linux系统下载,U盘启动:昂达平板用上了Ubuntu Uudgie 16.10 Linux操作系统...
  8. origin 截断y轴
  9. 网络流量分析——NPMD关注IT运维、识别宕机和运行不佳进行性能优化。智能化分析是关键-主动发现业务运行异常。科来做APT相关的安全分析...
  10. STM32CubeMX - 系统框图
  11. 串口调试工具--SecureCRT的使用
  12. 《智能商业》读后感作文5000字
  13. 解决虚拟机突然连不上网的问题
  14. 投资-理财书籍免费阅读
  15. HP 5820打印机无法驱动,总有一个惊叹号,是系统文件不正常所致
  16. mysql charindex 不存在_mysql – 分隔逗号分隔字符串 – FUNCTION db.CHARINDEX不存在
  17. stm32十六进制字符串转十进制数值代码
  18. Vue 搭建一个前端项目
  19. 解决VS code报错,过程试图写入的管道不存在(Bad owner or permissions on C:\\Users\\Administrator/.ssh/config)
  20. 佳能ip110 linux驱动下载,佳能ip110驱动

热门文章

  1. python代码扫描工具_Python脚本实现Web漏洞扫描工具
  2. 中南天坑专业到武大计算机的考研分享~
  3. linux dump备份svn,svnadmin dump+load库中的某个目录用svndumpfilter 可实现
  4. php ziparchive 类不存在,php – 致命错误:类’ZipArchive’中找不到
  5. 格拉布斯检验法matlab,格拉布斯检验法MATLAB算法
  6. 大意导致Java访问DB2库时导出SQLCODE=-301, SQLSTATE=07006错误
  7. http协议 文件下载原理详解
  8. ArcGIS实验教程:ArcGIS 10.2手把手图文安装教程(经典版)
  9. 两张图让你快速读懂JVM字节码指令
  10. 学生管理系统IPO图_基于BIM技术的医院建筑运维管理系统构建