传送门

sbw太神啦orz

首先N<=20可以直接暴搜

然后玄学剪枝可以过18个点

那么N<=40的时候,就把它拆成两半分别暴搜,再用dp拼起来

对于前半段,设f[i][j]是开始高度为i,获得金币为j的方案数;对于后半段,设g[i][j]是结束高度为i,获得金币为j的方案数(离散化一下高度)

然而V<=4e7,并不能直接记

但其实每一段最多只有$2^{20}$种金币数,状压一下每一位选不选,再预处理出来这样的金币数是多少

然后统计答案,$ans=\sum{g[i][j]*f[k][l]},i>k,v[j]+v[l]>=M$

给f做一个前缀和,给每个状态按v排序,可以$O(n*2^{n/2})$统计答案

然后会MLE,注意到对于每种状态其实每个开始高度/结束高度 都只有选或者不选,做个前缀和最多也只有20

把int改成unsigned char 就行了(逃

 #include<bits/stdc++.h>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=,maxs=(<<)+;
inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
}
int H[maxn],N,M,v1[maxs],v2[maxs],rk1[maxs],rk2[maxs];
unsigned char f[][maxs],g[][maxs];
void dfs1(int x,int tar,int h,int y){
if(x>tar) return;
dfs1(x+,tar,h,y);
if(H[x]>h) f[H[x]][y|(<<(x-))]++,dfs1(x+,tar,H[x],y|(<<(x-)));
}
void dfs2(int x,int tar,int h,int y){
if(x<tar) return;
dfs2(x-,tar,h,y);
if(H[x]<h) g[H[x]][y|(<<(x-tar))]++,dfs2(x-,tar,H[x],y|(<<(x-tar)));
} inline bool cmp1(int a,int b){return v1[a]<v1[b];}
inline bool cmp2(int a,int b){return v2[a]<v2[b];}
int main(){
// freopen("62.in","r",stdin);
// freopen("62.out","w",stdout);
int i,j,k;
N=rd(),M=rd();
for(i=;i<=N;i++){
rk1[i]=H[i]=rd(),rk2[i]=rd();
}
sort(rk1+,rk1+N+);
int t=unique(rk1+,rk1+N+)-rk1-;
for(i=;i<=N;i++)
H[i]=lower_bound(rk1+,rk1+t+,H[i])-rk1;
int m=N>>;
int n1=(<<m)-,n2=(<<(N-m))-;
dfs1(,m,,);
dfs2(N,m+,,); f[][]=;g[t+][]=;
for(i=;i<=t;i++){
for(j=;j<=n1;j++)
f[i][j]+=f[i-][j];
}
for(i=;i<=n1;i++){
for(j=;j<=m;j++)
if((i>>(j-))&) v1[i]+=rk2[j];
}for(i=;i<=n2;i++){
for(j=;j<=N-m;j++)
if((i>>(j-))&) v2[i]+=rk2[j+m];
}
for(i=;i<=n1;i++) rk1[i]=i;
for(i=;i<=n2;i++) rk2[i]=i;
sort(rk1+,rk1+n1+,cmp1);
sort(rk2+,rk2+n2+,cmp2);
ll ans=;
for(i=;i<=t+;i++){
ll s=;
for(j=,k=n1;j<=n2;j++){
for(;k>=&&v1[rk1[k]]+v2[rk2[j]]>=M;k--)
s+=f[i-][rk1[k]];
ans+=s*g[i][rk2[j]];
}
}
printf("%lld\n",ans);
return ;
}

suoi62 网友跳 (暴搜+dp)的更多相关文章

  1. codeforces 339C Xenia and Weights(dp或暴搜)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Xenia and Weights Xenia has a set of weig ...

  2. 子矩阵(暴搜(全排列)+DP)

    子矩阵(暴搜(全排列)+DP) 一.题目 子矩阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 1  解决: 1 [提交][状态][讨论版] 题目描述 给出如下定义: 1. 子矩阵:从一 ...

  3. [noip2016]愤怒的小鸟<状压dp+暴搜>

    题目链接:https://vijos.org/p/2008 现在回过头去看去年的考试题,发现都不是太难,至少每道题都有头绪了... 这道题的数据范围是18,这么小,直接暴力呗,跑个暴搜就完了,时间也就 ...

  4. Codeforces 1519F - Chests and Keys(暴搜+以网络流为状态的 dp)

    Codeforces 题目传送门 & 洛谷题目传送门 难度终于出来了--又独立切掉一道 *3200,凯信(所以我已经独立切掉三道 *3200 了?) 首先考虑我们已经知道了每个宝箱上有哪些锁, ...

  5. HDU 4284 Travel (Folyd预处理+dfs暴搜)

    题意:给你一些N个点,M条边,走每条边要花费金钱,然后给出其中必须访问的点,在这些点可以打工,但是需要先拿到证书,只可以打一次,也可以选择不打工之直接经过它.一个人从1号点出发,给出初始金钱,问你能不 ...

  6. NOIP 2011 Mayan游戏 大暴搜

    题目链接:https://www.luogu.org/problemnew/show/P1312 我的第一篇题解!! 当然感谢ZAGER 的提示,他的链接https://www.cnblogs.com ...

  7. P4799 [CEOI2015 Day2]世界冰球锦标赛(折半暴搜)

    题目很明确,不超过预算的方案数.两个直觉:1.暴搜2.dp 每个点两种状态,选或不选.... 1.可过20% 2.可过70% 正解:折半搜索(meet in the middle) 有点像以前的双向广 ...

  8. hdu4848 DFS 暴搜+ 强剪枝

    题意:       给你一个图,然后问你从1出发遍历所有的点的距离和是多少,这里的距离和是每一个点到1的距离的总和,不是选择一条遍历所有点的路径的总长度,时间限制是 8000ms. 思路:       ...

  9. 【BZOJ-3033】太鼓达人 欧拉图 + 暴搜

    3033: 太鼓达人 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 204  Solved: 154[Submit][Status][Discuss] ...

随机推荐

  1. Python&R&量化 金融之路

    [ 分类 ]- 金融之路 - 闲云孤鹤(人生在世五十年,大千世界一瞬间,浮生若梦,仿佛间,幻境一场,生者无常,终须尽.) - CSDN博客 https://blog.csdn.net/robertso ...

  2. 1 CHM 中文都是乱码

    CHM格式是Windows系统里常见的帮助文档格式,但有时一些CHM格式的文档会局部显示乱码,特别是一些外文文档在中文版Windows里.这是因为,CHM格式文档在Windows下默认是使用IE浏览器 ...

  3. 网络编程--使用UDP发送接收数据

    package com.zhangxueliang.udp; import java.io.IOException; import java.net.DatagramPacket; import ja ...

  4. 剑指offer(7)

    今天的几道题目都是关于斐波那契数列的. 题目1: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 传统的方法采用递归函数,这种 ...

  5. snv的使用

    1.搭建SVN服务器 (1)直接安装 (2)创建工号,分组,分配权限(图形化界面的直接操作,非图形界面的需要改配置文件conf文件夹下) (3)创建仓库,D:\Repositories\OA:cmd命 ...

  6. jQ append 添加html 及字符串拼接

    如图,我要拼接这样一段html: 点击下边添加按钮,不断添加这段Html html: <div class="x_addtable"> <div class=&q ...

  7. 莫烦scikit-learn学习自修第一天【scikit-learn安装】

    1. 机器学习的分类 (1)有监督学习(包括分类和回归) (2)无监督学习(包括聚类) (3)强化学习 2. 安装 (1)安装python (2)安装numpy >=1.6.1 (3)安装sci ...

  8. qtp 自动货测试桌面程序-笔记(使用参数 parameters)

    dtGlobalSheet:运行整个test时候使用的参数(心得:可以将公共使用的测试数据放于全局表格中,所有action脚本都可以使用同一个数据,如供应商.客户.商品) dtActionSheet: ...

  9. php2

    session   //将用户的会话数据存储在服务端,通过 session_start()开启session,通过$_SESSION读写session session_start(); //开启ses ...

  10. 洛谷 p1219 八皇后

    刚参加完蓝桥杯 弱鸡错了好几道..回头一看确实不难 写起来还是挺慢的 于是开始了刷题的道路 蓝桥杯又名搜索杯 暴力杯...于是先从dfs刷起 八皇后是很经典的dfs问题 洛谷的这道题是这样的 上面的布 ...