传送门

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. 从Mongo导出数据库到Excel

    在MongoDB的安装目录的bin文件夹下打开命令行: ./mongoexport -d kugou_db -c songs -f rank,singer,song,time --type=csv - ...

  2. Jenkins系统上的时间不正确问题

    很简单,点击系统管理,选择执行脚本命令: 打开 [系统管理]->[脚本命令行]运行下面的命令 System.setProperty('org.apache.commons.jelly.tags. ...

  3. javascript深入浅出——学习笔记(六种数据类型和隐式转换)

    在慕课之前学过JS深入浅出,最近发现很多东西都记不太清楚了,再复习一遍好了,感觉这个课程真的超级棒的,做做笔记,再添加一些学习内容

  4. Junit概述

    Junit ->  java unit.也就是说Junit是xunit家族中的一员. unit   <- unit test case,即单元测试用例. Junit  = java uni ...

  5. js对字符串的一些操作方法

    1.charCodeAt(index); 返回一个整数,代表下标位置上字符的Unicode的编码. 2.fromCharCode(code1,code2,code3,...); code1代表Unic ...

  6. PLA-1

    PLA(Principal Component Analysis)主成分分析: 思路1:坐标旋转 1.数据分布以及投影: 2.特征值以及特征向量 思路2: 未完待续...

  7. Java连接RabbitMQ之创建连接

    依赖包: <dependencies> <dependency> <groupId>junit</groupId> <artifactId> ...

  8. 上传第三方jar包至maven私服,以geotools为例

    上传jar包(模块打包方式为jar) mvn deploy:deploy-file -DgroupId=org.geotools -DartifactId=gt-api -Dversion=10.3 ...

  9. 傻瓜式搭建私人网络硬盘——owncloud安装指南

    百度云这个贱货天天删我资源,我已经忍无可忍了,于是想搭建一个owncloud来放我的里番.使用owncloud不仅安全,而且还可以在线播放,离线下载,功能相当强大. 然而·····网上查了一下,竟然无 ...

  10. BZOJ3239Discrete Logging——BSGS

    题目大意:给出$P,B,N$,求最小的正整数$L$,使$B^L\equiv N(mod\ P)$. $BSGS$模板题. #include<set> #include<map> ...