首页 > 编程知识 正文

神奇的口袋小班教案,神奇的口袋TXT

时间:2023-05-04 19:08:24 阅读:178311 作者:574

标题:神奇口袋|时间限制: 1秒|内存限制: 65536K

有一个不可思议的口袋。 总容积是40。 在这个口袋里可以换几样东西。 这些物品的总体积必须是40。 约翰现在

有n个想得到的物品。 各个道具的体积分别为a1、a2……an。 约翰可以在这些东西中选几个。 如果有选择的话

物体的总体积为40,利用这个神奇的口袋,John可以得到这些物品。 现在的问题是,约翰有多少种不同

同样是选择东西的方法。

输入说明:

的第一行是正整数n(1=n=20 ),表示不同的项目数。 以下n行每行有1到40之间的正数

整数,分别给出a1、a2……an的值。

输出说明:

输出不同项目的选择方法的数量。

样品1:

输入

3

20

20

20

输出功率

3

import java.util.Scanner; 公共类密码{//rightsolutionstaticint [ ] weight; 静态输入n; 静态计数=0; publicstaticvoidmain (string [ ] args ) scanner input=new scanner (system.in ); wile(input.hasnext () ) { N=input.nextInt ); weight=new int[N 1]; for(intI=1; i=N; I ) { weight[i]=input.nextInt (; (计数(40,n ); system.out.println(count ); }/***本题采用的是递归思想。 * 1.物品有n件,将物品逐一放入weight[]; 2 .递归函数count(ints,int n ) :s表示物品的剩余重量,n表示可选择的物品的个数(递归分为两个阶段) a .从后向前安装,选择后使用s-weight[n],n-1 如果有解count; 如果没有解就返回* b。 选择当前物品无法求解时,选择忽略当前物品,从n-1个物品中进行删除递归; *总结:这道题其实是关于高中序列搭配的思想,从这道题出发,运用序列搭配思想*递归解题需要分为两个阶段。 会出现回退现象,回退后需要再进行一次其他道路的递归。 * @ params * @ paramn */public static void {只要满足count (ints,int n ) /正好if ) s==0) ) count; 返回; (/)如果为s0或n1,则表示if不成立(S0|| ) S0N1) ) { return; (//减去当前物品用的剩余s,递归计数(s-weight[n],n - 1 ); //在当前物品这条路走不通的情况下,跳过当前物品,直接n -1递归地计算(s,n -1 ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。