`

poj 2755(递归)

poj 
阅读更多

   神奇的口袋

总时间限制:
10000ms
内存限制:
65536kB

 

描述
有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。
输入
输入的第一行是正整数n (1 <= n <= 20),表示不同的物品的数目。接下来的n行,每行有一个1到40之间的正整数,分别给出a1,a2……an的值。
输出
输出不同的选择物品的方式的数目。
样例输入
3
20
20
20
样例输出
3
  解题思路:
1.设fun(a1,a2....an,40)为a1,a2....an凑出40的方法数。
考虑凑数的方法分为两类:
有a1 和没有a1,则可以得
fun(a1,...an,40)  = fun(a2.....an,40-a1)  //有a1
  + fun(a2......an,40) ;//没a1
我们把a1.....an所有整数放到一个数组a中,n表示数组中
整数的个数,i表示从第i个整数开始凑数,sum,表示要凑出
的整数,则可得公式
fun(a,n,i,sum) = fun(a,n,i+1,sum-a[i])//用到a[i]
 + f(a,n,i+1,sum) ;//不用a[i]
2.递归出口说明
如果sum等于0,说明前面已经找到一种成功的组合方式,返回1,否则,就是sum不等于0
如果i==n,说明没有可选的数来完成这一组和方式,返回0,如果sum<0,说明刚刚尝试的组合凑不出要组合的数,所以返回0 
3.解决方法: G++
#include<iostream>
using namespace std ;
int a[21] ;
int n ;
int fun(int i,int sum)
{
 if(sum==0)  return 1 ;
 if(i==n||sum<0) return 0 ;
 return fun(i+1,sum-a[i]) + fun(i+1,sum) ;
}
int main()
{
 int i,t;
 cin>>n ;
for(i=0;i<n;i++)
    cin>>a[i] ;
  t = fun(0,40);
cout<<t<<endl;
    return 0 ;
}
 

分享到:
评论

相关推荐

    poj2775.rar_poj_poj 27_poj27_poj2775

    poj题目2775文件子目录源代码,递归经典题目,

    史上最全poj题目分类

    史上最全poj题目分类及原题 包括:基本算法:贪心、递归、递推、枚举;基本数据结构,链表、栈;动态规划;搜索;高级数据结构:二叉搜索树、线段树、树状数组;数学:数论

    NOIP NOI 信息学竞赛 ACM-ICPC POJ(北京大学在线评测系统)刷题推荐 OI复习计划 算法大纲

    (poj1753,poj2965)(2)贪心(poj1328,poj2109,poj2586)(3)递归和分治法.(4)递推.(5)构造法.(poj3295)……中级有:(1)C++的标准模版库的应用. (poj3096,poj3007)(2)较为复杂的模拟题的训练(poj3393,poj1472,poj3371,...

    poj 3295源代码

    递归实现 各种BOOL算 注意C++的判断机制

    POJ 2255 java

    3、利用递归复原二叉树(把子树看作新的二叉树) 4、后序遍历特征:后序遍历字母串 自右至左 依次为: 最外层(总树,设为第0层)右子树的根,内1层右子树的根,内2层右子树的根….内n层右子树的根,内n层左子树的根...

    POJ滑雪问题

    POJ上1088号的滑雪问题,需要的赶紧收藏了吧。递归典范

    poj]滑雪问题

    poj acm通过的水题 完美动态规划和递归的应用,欢迎查看分享

    acm pku spoj sgu 经典 图论题解题报告

    poj 2230 递归求欧拉回路 poj 2985 bst模板 poj2723 2-sat验证,二分答案 poj2455 dinic (ek会超时) hdu1689 求最小奇数环 poj2391 isap最快,dinic不减枝会超时 poj2455 isap 最快(ek会超时) poj2832 并查集边的...

    递归分形java

    递归分形,java课程,一个小程序关于树形的动态演示。是两个源文件在一个.txt文件上需要重新复制黏贴建立两个java文件再使用。

    北大oj 题目分类

    (3)递归和分治法. (4)递推. (5)构造法.(poj3295) (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法: (1)图的深度优先遍历和广度优先遍历. (2)最短路径算法(dijkstra,bellman-ford,floyd,...

    程序员必须掌握哪些算法_介绍

    一.基本算法:枚举. (poj1753,poj2965)贪心(poj1328,poj2109,poj2586)递归和分治法

    C语言数据结构递归之斐波那契数列

    因为自己对递归还是不太熟练,于是做POJ1753的时候就很吃力,就是翻棋子直到棋盘上所有棋子的颜色一样为止,求最少翻多少次,方法是枚举递归。然后就打算先做另一道递归的题(从数组中取出n个元素的组合),但是同样...

    poj-solve:算法练习

    Algorithm-Java Algorithms + Data Structures = Programs....最短路径(dijkstra,bellman-ford,floyd,heap+dijkstra)(,,poj1062,poj2253,poj1125,poj2240) 最小生成树(prim,kruskal)(p

    经典动态规划合集_牛人 树形,压缩 老题

    典型的动态规划,用递归下的记忆化搜索来实现 1088 POJ 动态规划加速原理之四边形不等式 基于连通性状态压缩的动态规划问题 对一些DP题目的小结 树型动态规划 树型动态规划和状态压缩动态规划 算法导论第15章-动态...

    清华大学 张昆玮 《统计的力量》

    POJ上的某题,时限很紧…… 大家都用树状数组,但是有人只会用线段树呢? 而且我可以轻易改出一道不能用树状数组的题 在线段树一次次TLE后,有一个ID发帖抱怨 “下次写一个汇编版非递归线段树,再超时?” 可是大家...

    leetcode打不开-codeBook:为了好玩,永远

    poj 的代码。 所有 C++ 代码。 bfs.cpp:我的 poj 3984 解决方案。最短路径的 BFS,并递归地追溯路径。 解决这个问题我想起了很多:如何定义mutli-dim vector,如何定义队列,如何定义struct数组,如何定义方向,...

    leetcode中国-MyAlgorithmSolutions::balloon:记录我所有的算法/数据结构

    leetcode中国 MyAlgorithmSolutions 记录我所有的算法/数据结构 目录 点击打开目录 笔记 数据结构 算法(第四版) 大一题目 HDOJ LeetCode 程序员面试金典 剑指OFFER PAT 甲级 ...POJ ...栈/递归 清华oj入门

    挑战程序设计竞赛(第2版)

    2.1.1 递归函数 2.1.2 栈 2.1.3 队列 2.1.4 深度优先搜索 2.1.5 宽度优先搜索 2.1.6 特殊状态的枚举 2.1.7 剪枝 2.2 一往直前!贪心法 2.2.1 硬币问题 2.2.2 区间问题 2.2.3 字典序最小问题 2.2.4 其他例题 2.3 记录...

    leetcode2sumc-coding:用C++编码

    递归 排列:#、# 哈希 二和:# 同构字符串:# 注意:构建堆,O(n); 提取根并重建 O(logn) 从数据流中查找中位数:# 合并 k 个排序的数组/列表:# 链表 #,# 树 遍历:前序、中序、后序、水平 同一棵树:#[./...

    cpp-算法精粹

    AlgoHub囊括了 POJ, ZOJ, leetcode, HackerRank 等网站的经典题目(一些质量不高的题目则忽略),且 AlgoHub有非常简单的加题系统,用户不需要写一行代码即可自己添加题目,所以AlgoHub的题库还在飞速增长中。...

Global site tag (gtag.js) - Google Analytics