题目

挑选卡片(Picking cards)
链接: https://ac.nowcoder.com/acm/contest/3286/D

牛牛有N张卡片,在第i(1 ≤ i ≤ N)张卡片上写着一个数字xi 。
牛牛现在准备从这些卡片中挑选一些卡片(数量大于等于1),使得被挑选的这些卡片的数字的平均值为A。
牛牛想问你一共有多少种挑选方法?

输入描述:
输入包括两行。
第一行1个正整数N(1≤N≤50)。
第二行N个整数x i(1≤x i ≤50)。
输出描述:
输出一个整数,表示挑选的方法数。

示例1

输入
8
7 9 8 9
输出
5
说明
一共有5种挑选方法使得平均数为8:
1、选择第三张卡片
2、选择第一、二张卡片
3、选择第一、四张卡片
4、选择第一、二、三张卡片
5、选择第一、三、四张卡片

示例2

输入
5
3 6 2 8 7 6 5 9
输出
19

dfs深度优先解法

解题思路:

  1. 对数组升序排序;
  2. 回溯每个数组的每个数,要么选择,要么不选择(list.remove(list.size() - 1);)
  3. 当平均值为target,并且余数为0时,加入结果集合中。
  4. 结果就是集合的个数。
package backtracking;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;// https://ac.nowcoder.com/acm/contest/3286/D
public class PickupCards {public static void main(String[] args) {PickupCards obj = new PickupCards();//int[] inputs = {7, 9, 8, 9};//int target = 8;int[] inputs = {3, 6, 2, 8, 7, 6, 5, 9};int target = 5;int result = obj.pickupCards(inputs, target);System.out.println("result > " + result);}public int pickupCards(int[] inputs, int target) {// check edgesif (inputs == null || inputs.length == 0) {return 0;}List<List<Integer>> resultList = new ArrayList<List<Integer>>();Arrays.sort(inputs);List<Integer> list = new ArrayList<Integer>();//dfsdfs(inputs, resultList, list, 0, target);return resultList.size();}private void dfs(int[] inputs, List<List<Integer>> resultList, List<Integer> list, int start, int target) {// exit conditionlong sum = 0;for (int item: list) {sum += item;}if (list.size() != 0 && sum / list.size() == target && sum % list.size() == 0) {System.out.println(Arrays.toString(list.toArray()));resultList.add(new ArrayList<Integer>(list));return;}if (start >= inputs.length) {return;}list.add(inputs[start]);dfs(inputs, resultList, list, start + 1, target);list.remove(list.size() - 1);dfs(inputs, resultList, list, start + 1, target);}
}

代码下载

https://github.com/zgpeace/awesome-java-leetcode/blob/master/code/LeetCode/src/backtracking/PickupCards.java

算法:回溯十 挑选卡片pickup cards相关推荐

  1. 回溯java算法_聊聊算法——回溯算法

    "递归只应天上有,迭代还须在人间",从这句话我们可以看出递归的精妙,确实厉害,递归是将问题规模逐渐减小, 然后再反推回去,但本质上是从最小的规模开始,直到目标值,思想就是数学归纳法 ...

  2. 斗地主AI算法——第十五章の测试模块

    前面几章已经把整个斗地主AI算法工程完成的差不多了,接下来进入整合联调以及模拟测试模块. 测试模块主要任务就是代替服务器给出我们需要的数据.因为我们本来的计划是封装成类库通过服务器调用获取,其调用的接 ...

  3. 基本算法-回溯法(迷宫问题)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 本文介绍一种经典算法--回溯法,可作为迷宫问题的一种解法,以下是本篇文章正文内容,包括算法 ...

  4. 算法基础-十大排序算法及其优化(文末有抽奖福利哦)

    算法基础-十大排序算法及其优化 算法基础-十大排序算法及其优化 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kw1LA5Q4-1607527572080)(/uplo ...

  5. java经典算法四十题

    java经典算法四十题 [程序9]题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程找出1000以内的所有完数. public class W ...

  6. 斗地主AI算法——第十四章の主动出牌(3)

    上一章已经排除了飞机.三带等牌型,那么除去炸弹王炸以外,我们只剩下单牌.对牌.三牌以及单顺.双顺.三顺了. 首先说单牌.对牌.三牌.其逻辑基本一样,只是出牌的个数有差别,即:如果该i牌数量满足这种牌型 ...

  7. 数据结构与算法:十大排序算法之归并排序

    数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...

  8. 数据结构与算法:十大排序算法之插入排序

    数据结构与算法:十大排序算法之插入排序 package TopTenSortingAlgorithms;import java.util.Arrays; import java.util.Scanne ...

  9. 数据结构与算法:十大排序算法之堆排序

    数据结构与算法:十大排序算法之堆排序 堆排序可以说是选择排序的优化 package TopTenSortingAlgorithms;import java.util.Arrays; import ja ...

  10. 数据结构与算法:十大排序算法之冒泡排序

    数据结构与算法:十大排序算法之冒泡排序 package array;import java.util.Arrays;//冒泡排序 //1.比较数组中两个相邻的元素,如果第一个数比第二个数大,我们就交换 ...

最新文章

  1. 一台计算机如何创建多个用户,一台电脑怎么管理多个腾讯视频号
  2. 网络爬虫Java还是Python还是c++?
  3. etl构建数据仓库五步法_带你了解数据仓库的基本架构
  4. java 枚举(enum) 全面解读
  5. 当当年中庆典,力度超前,花120买300的硬核书
  6. 深度学习超分辨率最新综述:一文道尽技术分类与效果评测
  7. 找轮转后的有序数组中第K小的数
  8. Android LED电子表时钟字体digital font
  9. Matlab聚类分析相关函数
  10. 使用SplitContainer控件
  11. 装机之必备软件下载合集
  12. POJ 3764 The xor-longest Path
  13. ansys2020视频教程
  14. Google maps及51ditu的图片切割及存储方法
  15. linux下修改tomcat默认访问主页
  16. 兼容android 6.0以上获取设备编号等权限
  17. 找计算机研究的论文18个平台
  18. 1086:角谷猜想(C C++)
  19. 决策树 建模_主题建模到类别树中
  20. Wamp PHP5.5.12安装Redis扩展--Star.Hou

热门文章

  1. LintCode—删除链表中的元素(452)
  2. 【转】JQuery中$.each 和$(selector).each()的区别详解
  3. webpack项目使用eslint建立代码规范
  4. powershell 模拟IE行为
  5. Hibernate注解与JPA
  6. java练习题-求int类型N值的阶乘
  7. Duilib中Webbrowser事件完善使其支持判断页面加载完毕
  8. 浅谈压缩感知(二十七):压缩感知重构算法之稀疏度自适应匹配追踪(SAMP)
  9. http服务器和application服务器区别
  10. android RelativeLayout 动态添加子View