当前位置: 首页 > news >正文

DFS剪枝算法经典题目-挑选

4954. 挑选 - AcWing题库

给定一个包含 n 个正整数 a1,a2,…,an的集合。

集合中可能存在数值相同的元素。

请你从集合中挑选一些元素,要求同时满足以下所有条件:

  1. 被选中元素不少于 2 个。
  2. 所有被选中元素之和不小于 l 且不大于 r。
  3. 所有被选中元素之中最大元素与最小元素之差不小于 x。

请问,一共有多少种不同的选法。

注意:

  • 不考虑元素顺序,{a1,a2} 和 {a2,a1} 应当视为同一种选法。
  • 不同元素即使数值相同,也应当视为不同个体,即使 a1=a2,{a1,a3}和 {a2,a3} 也应当视为不同选法。
输入格式

第一行包含四个整数 n,l,r,x。

第二行包含 n 个整数 a1,a2,…,an。

输出格式

一个整数,表示不同选法的数量。

数据范围

前 33 个测试点满足 1≤n≤5。
所有测试点满足 1≤n≤15,1≤l≤r≤109,1≤x≤106,1≤ai≤106。

输入样例1:
3 5 6 1
1 2 3
输出样例1:
2
输入样例2:
4 40 50 10
10 20 30 25
输出样例2:
2
输入样例3:
5 25 35 10
10 10 20 10 20
输出样例3:
6

根据题目,因为不考虑选取的顺序,所以可以根据下标进行dfs,类似根据下标求组合数。

 首先遍历数组,从每一个数开始dfs,参数分别为当前搜索的数的总和,搜索到的数组的下标,搜索数中最大值,搜索数种最小值,搜索数的个数,然后每次dfs的时候,判断当前总数是否大于 r ,如果大于则不用继续搜索了,可以直接剪掉。然后通过参数判断是否符合条件,如果符合则ans++,然后继续遍历,从index+1开始遍历,更新参数继续dfs,最终结果就为ans。

AC code:

#include<bits/stdc++.h>
using namespace std;
int n, l, r, x;
int arr[20];
int ans = 0;
void dfs(int total, int index, int mx, int mi, int cnt) {if (total > r ) return ;if (total >= l && total <= r && (mx - mi) >= x && cnt > 1) ans++;for (int i = index + 1; i <= n; i++) {int a = max(mx, arr[i]);int b = min(mi, arr[i]);dfs(total + arr[i], i, a, b, cnt + 1);}
}
int main() {cin >> n >> l >> r >> x;for (int i = 1; i <= n; i++) cin >> arr[i];for (int i = 1; i <= n; i++) {dfs(arr[i], i, arr[i], arr[i], 1);}cout << ans;
}

http://www.lryc.cn/news/292442.html

相关文章:

  • 考研经验总结——考试期间
  • vue3 源码解析(6)— lifecycle 生命周期的实现
  • three.js CSS2DRenderer、CSS2DObject渲染HTML标签
  • SECS/GEM300和半导体e84控制器
  • k8s二进制及负载均衡集群部署详解
  • 【Django开发】0到1开发美多商城项目第3篇:用户注册业务实现(附代码,已分享)
  • 免费的ppt网站分享
  • 基于Transformer结构的扩散模型综述
  • POI操作word表格,添加单元格,单元格对齐方法(不必合并单元格)
  • maven代码规范检查(checkstyle、findbugs)
  • 妙用Java反射,让代码更加优雅
  • 实习日志10
  • 配置alias(设置别名@)
  • 【动态规划】【数学】1388. 3n 块披萨
  • CS144--Chapter0--wsl2+docker环境搭建
  • MGRE实验报告二
  • 算法设计与分析实验:最短路径算法
  • 共用体与枚举法,链表的学习
  • SG2520CAA汽车用晶体振荡器
  • 使用pip将第三方依赖包下载到本地指定位置
  • C语言探索:水仙花数的奥秘与计算
  • 2024年人工智能应用与先进制造科学国际学术会议(ICAIAAMS 2024)
  • 计算机图形学 实验
  • React + react-device-detect 实现设备特定的渲染
  • 文献速递:肿瘤分割----基于卷积神经网络的系统,用于前列腺癌[68Ga]Ga-PSMA PET全身图像的全自动分割
  • 2024 IC FPGA 岗位 校招面试记录
  • Linux 命令 —— top
  • 【Docker】使用VS创建、运行、打包、部署.net core 6.0 webapi
  • 抖音短视频矩阵营销系统源头独立开发搭建
  • Springboot使用数据库连接池druid