P4799 [CEOI2015 Day2]世界冰球锦标赛
\(\color{#0066ff}{题目描述}\)
今年的世界冰球锦标赛在捷克举行。Bobek 已经抵达布拉格,他不是任何团队的粉丝,也没有时间观念。他只是单纯的想去看几场比赛。如果他有足够的钱,他会去看所有的比赛。不幸的是,他的财产十分有限,他决定把所有财产都用来买门票。
给出 Bobek 的预算和每场比赛的票价,试求:如果总票价不超过预算,他有多少种观赛方案。如果存在以其中一种方案观看某场比赛而另一种方案不观看,则认为这两种方案不同。
\(\color{#0066ff}{输入格式}\)
第一行,两个正整数 N 和 M(\(1 \leq N \leq 40,1 \leq M \leq 10^{18}\)),表示比赛的个数和 Bobek 那家徒四壁的财产。
第二行,N 个以空格分隔的正整数,均不超过 \(10^{16}\) ,代表每场比赛门票的价格。
\(\color{#0066ff}{输出格式}\)
输出一行,表示方案的个数。由于 N 十分大,注意:\(答案 \le 2^{40}\)
\(\color{#0066ff}{输入样例}\)
5 1000
100 1500 500 500 1000
\(\color{#0066ff}{输出样例}\)
8
\(\color{#0066ff}{题解}\)
meet in the middle 对抗搜索
\(O(2^{40}\to 2^{20}+2^{20}\to 2^{21})\)
合并中间量用upperbound
注意,不能用lowerbound,因为可能有相同价钱的方案,都要算上
#include<cstdio>
#include<queue>
#include<vector>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<cmath>
#define _ 0
#define LL long long
#define Space putchar(' ')
#define Enter putchar('\n')
#define fuu(x,y,z) for(int x=(y),x##end=z;x<=x##end;x++)
#define fu(x,y,z) for(int x=(y),x##end=z;x<x##end;x++)
#define fdd(x,y,z) for(int x=(y),x##end=z;x>=x##end;x--)
#define fd(x,y,z) for(int x=(y),x##end=z;x>x##end;x--)
#define mem(x,y) memset(x,y,sizeof(x))
#ifndef olinr
inline char getc()
{static char buf[100001],*p1=buf,*p2=buf;return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100001,stdin),p1==p2)? EOF:*p1++;
}
#else
#define getc() getchar()
#endif
template<typename T>inline void in(T &x)
{int f=1; char ch; x=0;while(!isdigit(ch=getc()))(ch=='-')&&(f=-f);while(isdigit(ch)) x=x*10+(ch^48),ch=getc();x*=f;
}
LL n,m;
LL a[1<<21],b[1<<21],s[50];
int num1,num2,mid;
LL ans;
inline void dfs1(int dep,LL tot)
{if(tot>m) return;if(dep==mid+1){a[++num1]=tot;return;}dfs1(dep+1,tot);dfs1(dep+1,tot+s[dep]);
}
inline void dfs2(int dep,LL tot)
{if(tot>m) return;if(dep==n+1){b[++num2]=tot;return;}dfs2(dep+1,tot);dfs2(dep+1,tot+s[dep]);
}
int main()
{in(n),in(m);fuu(i,1,n) in(s[i]);mid=(1+n)>>1;dfs1(1,0LL);dfs2(mid+1,0LL);std::sort(a+1,a+num1+1);fuu(i,1,num2) ans+=std::upper_bound(a+1,a+num1+1,m-b[i])-a-1;printf("%lld",ans);return ~~(0^_^0);
}
转载于:https://www.cnblogs.com/olinr/p/10060596.html
P4799 [CEOI2015 Day2]世界冰球锦标赛相关推荐
- 洛谷P4799 [CEOI2015 Day2] 世界冰球锦标赛 题解
洛谷P4799 [CEOI2015 Day2] 世界冰球锦标赛 题解 题目链接:P4799 [CEOI2015 Day2] 世界冰球锦标赛 题意: 译自 CEOI2015 Day2 T1「Ice Ho ...
- 洛谷—P4799 [CEOI2015 Day2]世界冰球锦标赛题解
题目链接:P4799 [CEOI2015 Day2]世界冰球锦标赛 题目大意: 给定钱数,问要多少种观赛方案,可以一场都不看. 题解思路: 这道题要用到一种搜索方法--折半搜索.具体方法为:我们先把数 ...
- 洛谷P4799 [CEOI2015 Day2] 世界冰球锦标赛
题目链接:P4799 [CEOI2015 Day2] 世界冰球锦标赛 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 折半搜索: 1:先搜索左半边的票价和 2:再搜索右半边的票价和 ...
- P4799 [CEOI2015 Day2]世界冰球锦标赛 (双端搜索)
[CEOI2015 Day2]世界冰球锦标赛 - 洛谷 对于n<=40的情况,正常暴搜无疑要寄,那么我们可以分别从前一半和后一半开始搜,再对所搜的内容排序后,每一个在后面里二分出符合的答案. 和 ...
- P4799 [CEOI2015 Day2] 世界冰球锦标赛
知识点:双向搜索 这个是双向深搜,也是我的第一道双向搜索,所以挑了一个简单的题来写,还是比较简单的,以及要了解双向搜索是怎么降低时间复杂度的 #include <bits/stdc++.h> ...
- 洛谷P4799—— [CEOI2015 Day2]世界冰球锦标赛(折半搜索)
原题链接 题意: 给n个物品和对应的价格,问用不超m元的钱可以买到的物品的方案数. 思路: 折半搜索的入门题(雾.jpg) n的范围是n<=40.普通的搜索一定会TLE,考虑将物品分成两部分来搜 ...
- P4799 [CEOI2015 Day2]世界冰球锦标赛(折半暴搜)
题目很明确,不超过预算的方案数.两个直觉:1.暴搜2.dp 每个点两种状态,选或不选.... 1.可过20% 2.可过70% 正解:折半搜索(meet in the middle) 有点像以前的双向广 ...
- P4799 [CEOI2015 Day2]世界冰球锦标赛(折半搜索)
题目大意: 解题思路: 如果直接暴力(你的钱太多不允许你用背包),时间复杂度为O(240)O(2^{40})O(240)次方,但如果折半搜索可行的话,时间复杂度就为O(40∗220)O(40*2^{2 ...
- 【折半搜索】 洛谷 P4799 [CEOI2015 Day2]世界冰球锦标赛
我只会看题解和抄题解 普通搜索在这道题中存在的问题 一共最多有40场比赛,每一场比赛有看和不看2种选择,如果求看40场比赛一共有多少选择,最多有2^40种可能性,时间复杂度太高. 折半搜索思路 1.把 ...
最新文章
- C++ 虚函数个人理解
- CSS小技巧——CSS滚动条美化
- 笔记本安装linux系统_Win10怎么安装linux双系统?win10安装linux双系统教程
- 11 linux suse 本地源_suse 11 Linux 静态路由的添加方法
- org.hibernate.InvalidMappingException: Could not parse mapping document from resource
- iBeacon 初探
- c语言文件读写_学生信息管理系统(C语言\单向链表\文件读写)
- php image 转 data uri 图片 (Image Data URIs with PHP)
- Rust: 如何交换Vec类型中数据的位置?
- 手机视频性能测试软件,视频性能检测工具——安兔兔视频测试
- 181225 Matlab图解峰度kurtosis与偏度skewness
- 【ME909】华为ME909 4G LTE模块在树莓派下通过minicom进行发送短信演示
- Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks 论文阅读、复现及思考
- com.sun.mail.smtp.protected void rcptTo() 方法
- MySQL数据库被黑了
- JVM调优总结--压力测试
- [心得]让数据帮我说话
- axure流程图模式_手把手教你用AXURE绘制流程图的图文教程
- unity2D塔防游戏资源 Tower Defense 2D v1.3.1
- 固态硬盘无法识别,怎么办?4招教您解决!