问题 C: 神奇的口袋

[命题人 : 外部导入]

时间限制 :1.000 sec  内存限制 :32 MB

解决: 1491提交: 3359统计

题目描述

有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。

输入

输入的第一行是正整数n (1 <= n <= 20),表示不同的物品的数目。接下来的n行,每行有一个1到40之间的正整数,分别给出a1,a2……an的值。

输出

输出不同的选择物品的方式的数目。

样例输入 Copy

2

12

28

3

21

10

5

样例输出 Copy

1

0

法1:

(来源:https://blog.csdn.net/qq_41969845/article/details/109203845对于这类问题,我们应该首先想到使用递归

使用递归我们就应该想到递归式和递归边界

这道题可以这么理解,从物品的末尾往前找,每碰到一个物品有两种情况,一个是算上这个物体,一个是不算上,

如果算上,则还需加上的物体体积就应当减少

如果不算上,则还需加上的物体体积就不减少

递归边界有两个,

(1)选择的物体体积已经够了,不需要再加了,这是一种选择物体的方式,则返回1

(2)已经没有物体可供选择了,则无法选择,这没有解决问题,所以返回0

法2:

(来源:https://blog.csdn.net/weixin_38023259/article/details/105219236首先,这道题是口袋问题,即是一种组合问题,组合问题区别于排列问题,在于递推式是不断往下,即这个递推式往下推,而且这个index的终结点,是数而不是位置,所以也要进行边界判断。并且说明index最大只可能为N+1,所以不用担心其他问题,还有一点就是,组合的方式它不再是填数,所以它可以肆无忌惮地拿东西,记得在结束之前判断是否满足了条件即可。。。。。

java 口袋算法_【算法笔记】递归(神奇的口袋)相关推荐

  1. python实现五大基本算法_算法基础:五大排序算法Python实战教程

    排序是每个算法工程师和开发者都需要一些知识的技能. 不仅要通过编码实现,还要对编程本身有一般性的了解. 不同的排序算法是算法设计如何在程序复杂性,速度和效率方面具有如此强大影响的完美展示. 让我们来看 ...

  2. 算法导论 算法_算法导论

    算法导论 算法 Algorithms are an integral part of the development world. Before starting coding of any soft ...

  3. java 完全背包问题算法_算法笔记(c++)--完全背包问题

    算法笔记(c++)--完全背包和多重背包问题 完全背包 完全背包不同于01背包-完全背包里面的东西数量无限 假设现在有5种物品重量为5,4,3,2,1 价值为1,2,3,4,5 背包容量为10 #in ...

  4. java 进制转换算法_算法笔记_033:十六进制转八进制(Java)

    packagecom.liuzhen.systemExe;importjava.util.Scanner;public classMain {//把16进制字符串转成2进制字符串 publicStri ...

  5. java 一元线性回归_算法笔记:一元线性回归及Java实现

    这是voidAlex原创的第四篇博文. 源码在我的GitHub 回归问题 回归问题是研究自变量和因变量之间关系的一种预测模型技术.例如我们可以通过回归模型去预测房价与房子面积之间的关系,一个人每周花在 ...

  6. java猴子爬山_[算法]猴子爬山

    猴子爬山 问题描述 一只顽猴在一座有50级台阶的小山上爬山跳跃.上山时需要从山脚至山顶往上跳50级台阶,一步可跳2级,或跳3级,或跳4级,求上山有多少种不同的跳法? 下山时从山顶至山脚往下跳50级台阶 ...

  7. JAVA工程师常用算法_算法工程师必须要知道的8种常用算法思想

    算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 1.1 ...

  8. 蝴蝶优化算法_算法|FFT基础及各种常数优化,5万字笔记:公式推导+代码模板...

    作者:中二攻子 链接:https://ac.nowcoder.com/discuss/175409 来源:牛客网 本文含NTT.MTT.拆系数FFT.共轭优化FFT.多项式求逆与ln 约定: 1. 表 ...

  9. java k均值_算法——K均值聚類算法(Java實現)

    1.用途:聚類算法通常用於數據挖掘,將相似的數組進行聚簇 2.原理:網上比較多,可以百度或者google一下 3.實現:Java代碼如下 package org.algorithm; import j ...

  10. java 循环赛问题_算法——循环赛日程安排问题

    一.问题背景 设有n=2k个选手要进行网球循环赛,要求设计一个满足以下要求的比赛日程表: ①每个选手必须与其他n-1个选手各赛一次: ②每个选手一天只能赛一次. 二.问题分析 按此要求,可将比赛日程表 ...

最新文章

  1. mysql5.6.42 力资源_MySQL5.6.42解压版安装教程
  2. 陷阱太多!究竟该如何应对逆袭神器期权?某程序员历经4次上市公司,终于顿悟!...
  3. 整型和浮点型的区别_C的基础内容:常量之数值型常量,适合新手的学习
  4. 关于热插拔usb hotplug /proc/sys/kernel mdev udev busybox
  5. html app的登陆、注册,登陆_注册.html
  6. 错误: 找不到或无法加载主类com.**.**
  7. matlab循环结构
  8. linux 无法启动vnc_vnc登录,10个步骤教你在Linux中VNC登陆
  9. quartz 表说明
  10. 中断方式下进行串口通讯的正确方法
  11. spring----注解
  12. mongodb启动时报错ERROR: child process failed, exited with error number 1
  13. 网络工程师的机会在哪里
  14. matlab调用python数值精度改变吗_Matlab如何调用python脚本-matlab调用python数值精度改变吗 - PS下...
  15. K8S入门系列(1)-Windows10安装Docker,配置阿里云加速器
  16. 公众号写作排版指南v2.0(适配Dark Mode)
  17. java手机游戏主角技能上剑魂,DNF高手来回答
  18. java常用加密算法
  19. 329 矩阵中的最长递增路径
  20. 用“小花生”-阅读记录app坚持打卡快3年,我带儿子在学前实现中英文阅读量4500本 ...

热门文章

  1. 分布电容和杂散电容_分布电容
  2. 路由器登陆192.168.1.1打开后出现移动登陆页面
  3. 超大图片的储存/处理/显示
  4. Android新浪微博开发(一)授权认证
  5. ORACLE中通过SQL语句(alter table)来增加、删除、修改字段
  6. GDPR 和个人信息保护的小知识
  7. 计算机网络工程师干嘛的,什么是网络工程师?网络工程师是做什么的?
  8. 如何格式化小米云服务器,互联网要点:怎么把小米手机格式化(恢复出厂设置)...
  9. JHOST邀请码,2012年7月31日申请,2012年8月31日过期
  10. echarts图例动态置灰