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

题解:洛谷 P4799 [CEOI 2015] 世界冰球锦标赛 (Day2)

【题目来源】

洛谷:[P4799 CEOI 2015] 世界冰球锦标赛 (Day2) - 洛谷

【题目描述】

译自 CEOI2015 Day2 T1「****Ice Hockey World Championship

今年的世界冰球锦标赛在捷克举行。Bobek 已经抵达布拉格,他不是任何团队的粉丝,也没有时间观念。他只是单纯的想去看几场比赛。如果他有足够的钱,他会去看所有的比赛。不幸的是,他的财产十分有限,他决定把所有财产都用来买门票。

给出 Bobek 的预算和每场比赛的票价,试求:如果总票价不超过预算,他有多少种观赛方案。如果存在以其中一种方案观看某场比赛而另一种方案不观看,则认为这两种方案不同。

【输入】

第一行,两个正整数 \(N\)\(M(1 \leq N \leq 40,1 \leq M \leq 10^{18})\),表示比赛的个数和 Bobek 那家徒四壁的财产。

第二行,\(N\) 个以空格分隔的正整数,均不超过 \(10^{16}\),代表每场比赛门票的价格。

【输出】

输出一行,表示方案的个数。由于 \(N\) 十分大,注意:答案 \(\le 2^{40}\)

【输入样例】

5 1000
100 1500 500 500 1000

【输出样例】

8

【算法标签】

《洛谷 P4799 世界冰球锦标赛》 #搜索# #折半搜索meet in the middle# #CEOI(中欧)# #2015#

【代码详解】

// 40分版本
#include <bits/stdc++.h>
using namespace std;#define int long long  // 将int定义为long long类型,避免大数溢出const int N = 45;  // 数组最大容量
int a[N], n, m, cur, ans = 1;  // a: 存储有效数字,n: 输入数字总数,m: 目标值,cur: 有效数字计数,ans: 方案数(初始为1表示空集)// 深度优先搜索,计算所有子集和不超过m的方案数
void dfs(int step, int x)
{// 剪枝:如果剩余可用数字的最小值已经超过当前剩余容量xif (x < a[step]){return;}// 从step位置开始遍历所有可能的数字for (int i = step; i <= cur; i++){// 如果当前数字可以加入子集if (x >= a[i]){ans++;  // 增加方案数(选择当前数字)dfs(i + 1, x - a[i]);  // 递归搜索下一个数字}else {return;  // 由于数组已排序,后续数字更大,直接返回}}
}signed main()  // 使用signed main()替代int main(),因为int被重定义为long long
{cin >> n >> m;  // 读入数字总数n和目标值m// 筛选有效数字(不大于m的数字)for (int i = 1; i <= n; i++){int x;cin >> x;if (x > m) continue;  // 跳过大于m的数字a[++cur] = x;  // 存储有效数字}// 对有效数字进行升序排序,便于剪枝sort(a + 1, a + cur + 1);// 开始深度优先搜索dfs(1, m);// 输出所有子集和不超过m的方案数cout << ans;return 0;
}
// 满分版本
#include <bits/stdc++.h>
using namespace std;#define int long long  // 将int定义为long long类型,避免大数溢出const int N = 45;  // 数组最大容量
int a[N], n, m, cur, ans = 1;  // a: 存储有效数字,n: 输入数字总数,m: 目标值,cur: 有效数字计数,ans: 方案数(初始为1表示空集)
vector<int> sa, sb;  // sa: 前半部分数字的子集和,sb: 后半部分数字的子集和// 深度优先搜索,生成子集和
void dfs(int pos, int x, int type)
{// 剪枝:如果剩余可用数字的最小值已经超过当前剩余容量if (m - x < a[pos]){return;}// 确定搜索范围int end = cur;  // 默认搜索到末尾if (type == 0)  // 如果是搜索前半部分{end = cur / 2;  // 只搜索到中间位置}// 从pos位置开始遍历数字for (int i = pos; i <= end; i++){// 如果当前数字可以加入子集if (m - x >= a[i]){// 将新子集和存入对应向量if (type == 0){sa.push_back(x + a[i]);}else{sb.push_back(x + a[i]);}// 递归搜索下一个数字dfs(i + 1, x + a[i], type);}else{return;  // 由于数组已排序,后续数字更大,直接返回}}
}signed main()  // 使用signed main()替代int main(),因为int被重定义为long long
{cin >> n >> m;  // 读入数字总数n和目标值m// 筛选有效数字(不大于m的数字)for (int i = 1; i <= n; i++){int x;cin >> x;if (x > m) continue;  // 跳过大于m的数字a[++cur] = x;  // 存储有效数字}// 对有效数字进行升序排序,便于剪枝sort(a + 1, a + cur + 1);// 分治:将数字分成前后两部分,分别生成子集和dfs(1, 0, 0);  // 搜索前半部分数字dfs(cur / 2 + 1, 0, 1);  // 搜索后半部分数字// 对子集和数组进行排序,便于使用二分查找sort(sa.begin(), sa.end());sort(sb.begin(), sb.end());// 合并两部分结果:计算sa[i] + sb[j] <= m的方案数for (int i = 0; i < sb.size(); i++){// 对于sb中的每个和,找到sa中满足sa[j] <= m - sb[i]的最大索引int x = m - sb[i];int pos = upper_bound(sa.begin(), sa.end(), x) - sa.begin();ans += pos;  // 增加满足条件的方案数}// 加上单一部分的方案数(只使用前半部分或后半部分数字)ans += sa.size();  // 只使用前半部分数字的方案ans += sb.size();  // 只使用后半部分数字的方案// 输出所有子集和不超过m的方案数cout << ans;return 0;
}

【运行结果】

5 1000
100 1500 500 500 1000
8
http://www.jsqmd.com/news/394468/

相关文章:

  • 2026年国内靠谱的安检仪品牌口碑推荐,金属探测门/安检仪/智能安检/安检设备/安检门/安检机,安检仪源头厂家推荐 - 品牌推荐师
  • 2026年二手离心机厂家推荐:梁山强基机械设备有限公司,多类型二手离心机一站式供应 - 品牌推荐官
  • 2026年激光/医药/油墨/电缆/UV喷码机厂家推荐:中科智领定制化解决方案全解析 - 品牌推荐官
  • 2026国产数显高度仪厂家推荐:深圳市思瑞精达精密仪器,工业精密/高精度测量解决方案 - 品牌推荐官
  • 2026年建筑涂料厂家推荐:洁士美建材科技,无机/防火/内外墙涂料全品类解决方案 - 品牌推荐官
  • 2026年五轮/双向驾驶/履带式/国六/轨道式搅拌车厂家推荐:山东瑞通专用车制造有限公司全系供应 - 品牌推荐官
  • 2026年石家庄软件开发公司推荐:石家庄远近互联科技,手机/ERP/CRM/AI/APP开发全覆盖 - 品牌推荐官
  • 买前必看!2026按摩椅十大品牌技术品质和市场好评率双榜单出炉 - 速递信息
  • 2026年储罐生产厂家实力推荐:山东圣锐智能装备有限公司,大型/钢制/常压/卧式储罐全品类供应 - 品牌推荐官
  • 2026年少儿/家庭/青春期/儿童/青少年教育机构推荐:慧觉知力课堂唤醒生命内在能量 - 品牌推荐官
  • 2026模具导向件厂家推荐:广州市田格科技,模具配件/汽车模具/塑胶模具全系供应 - 品牌推荐官
  • 2026年液体丁腈改性剂厂家推荐:衡水赤兔马新材料有限公司,PVC增塑/耐寒/耐油改性全系解决方案 - 品牌推荐官
  • 2026年陶瓷制品厂家推荐:宜兴胜达耐火陶瓷,4孔陶瓷管/氮化铝加热盘等全系产品供应 - 品牌推荐官
  • 2026年重庆月嫂培训机构权威推荐:持证/上门/住家/金牌月嫂及技能培训,重庆市两江金佳职业技能培训学校实力之选 - 品牌推荐官
  • 2026模块化太空舱厂家推荐:山东五零一智能装备制造,旅游/景观/露营/网红太空舱全系供应 - 品牌推荐官
  • 2026年金属发光字制作厂家推荐:沈阳沸点广告有限公司,LED/亚克力/不锈钢发光字全系定制 - 品牌推荐官
  • 2026年共板法兰/螺旋/复合/防火/镀锌/不锈钢风管厂家推荐:湖南联泰环境设备全系供应 - 品牌推荐官
  • 2026年纸管生产厂家推荐:靖江市祥龙纸管制造有限公司,工业/化纤/测温/热电偶纸管专业供应 - 品牌推荐官
  • 2026试验机厂家推荐:济南文腾试验仪器,万能/电子/扭转疲劳/高低温试验机定制专家 - 品牌推荐官
  • 2026年英国/马来西亚/美国/香港留学服务推荐:啄木鸟教育一站式留学规划助力学子圆梦 - 品牌推荐官
  • 2026年滤波补偿控制器厂家推荐:新乡市获新源电气,多类型无功补偿控制器全覆盖 - 品牌推荐官
  • 2026食品级软管厂家推荐:深圳盛龙流体,钢丝/PU/透明软管全系供应,服务多行业 - 品牌推荐官
  • 2026年LNG天然气加气站设备厂家推荐:山东中能智华能源装备科技全系供应与建设服务 - 品牌推荐官
  • 2026京津冀记账公司推荐:三河市捷信会计服务,北京/天津/通州/朝阳多区域服务 - 品牌推荐官
  • 分布式深度学习训练框架Horovod - 详解
  • 2026年热镀锌角钢/镀锌角钢/不锈钢角钢/欧标角钢厂家推荐:河南北岸金属材料全系供应 - 品牌推荐官
  • 2026年不锈钢筛管/筛板/滤芯/水帽厂家推荐:江苏润达筛管筛板有限公司全系产品解析 - 品牌推荐官
  • 题解:洛谷 P2960 [USACO09OCT] Invasion of the Milkweed G
  • 完整教程:RAG不是万能的:没有可观测性,你的系统只是在“碰运气”
  • 2026年测定仪品牌排行,哪些生产商口碑上佳?NDWGY-503S外护套电缆故障定位仪,测定仪厂家联系电话 - 品牌推荐师