【学习笔记】双向(折半)搜索 meet in the middle
双向搜索
怎么觉得我的博客没什么正经算法啊。
坑,待填。
P4799 [CEOI2015 Day2] 世界冰球锦标赛
Code
#include<cstdio> #include<algorithm> #define LL long long using namespace std; const int MAXN = 45, MAXM = 1 << 21; int n, mid, cnt_l, cnt_r; LL m, ans; LL ticket[MAXN] ,sum_l[MAXM], sum_r[MAXM]; void dfs(int l, int r, LL tot, LL *sum, int &cnt){ if(tot > m) return; if(l > r){ sum[++cnt] = tot; return; } dfs(l + 1, r, tot, sum, cnt); dfs(l + 1, r, tot + ticket[l], sum, cnt); } inline LL read(){ LL x = 0, f = 1; char c = getchar(); while(c < '0' || c > '9'){ if(c == '-') f = -1; c = getchar(); } while(c >= '0' && c <= '9'){ x = (x << 1) + (x << 3) + (c ^ 48); c = getchar(); } return x * f; } int main(){ n = read(), m = read(); for(register int i = 1; i <= n; i++) ticket[i] = read(); mid = n >> 1; dfs(1, mid, 0, sum_l, cnt_l); dfs(mid + 1, n, 0, sum_r, cnt_r); sort(sum_l + 1, sum_l + 1 + cnt_l); for(register int i = 1; i <= cnt_r; i++) ans += upper_bound(sum_l + 1, sum_l + 1 + cnt_l, m - sum_r[i]) - sum_l - 1; printf("%lld", ans); return 0; }
以下为博客签名,与博文无关。
只要你们不停下来,那前面就一定有我。所以啊,不要停下来~
本文来自博客园,作者:TSTYFST,转载请注明原文链接:https://www.cnblogs.com/TSTYFST/p/16601556.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理