P2396 yyy loves Maths VII 状压dp 变态卡常
很容易想到dp,但是1<<24都有1600w的复杂度,要是普通做法肯定T掉
共有maxs=(1<<n)-1种情况
首先f[ ]记录某种情况的方案数,dis[ ]记录某种情况的步数和
然后每次到dis[i]=厄运值就不更新
解决卡常的方法
正常做法:2^(n+1) 肯定会T
改成 :2^nlogn O2优化过了 恶心心
f[i]=去掉i中某一个1的所有情况f[j]和
寻找某一个1用lowbit
删除某一个1用异或^
代码如下:
// luogu-judger-enable-o2//#pragma comment (linker, "/STACK:102400000,102400000")
#include<bits/stdc++.h>
#include<stdio.h>
#include<string.h>
#include<string>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#include<list>
#include<time.h>
#include<bitset>#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define Lson i<<1,l,mid
#define Rson i<<1|1,mid+1,r
#define half (l+r)/2
#define lowbit(x) x&(-x)
#define min4(a, b, c, d) min(min(a,b),min(c,d))
#define min3(x, y, z) min(min(x,y),z)
#define max3(x, y, z) max(max(x,y),z)
#define max4(a, b, c, d) max(max(a,b),max(c,d))
#define pii make_pair
#define pr pair<int,int>
typedef unsigned long long ull;
typedef long long ll;
const int inff = 0x3f3f3f3f;
const long long inFF = 9223372036854775807;
const int dir[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
const int mdir[8][2] = {0, 1, 0, -1, 1, 0, -1, 0, 1, 1, -1, 1, 1, -1, -1, -1};
const double eps = 1e-10;
const double PI = acos(-1.0);
const double E = 2.718281828459;
using namespace std;
const int mod=1e9+7;
const int maxn=1e5+51;
int f[1<<24],dis[1<<24];
int eyun[2];
int n,op;
int main()
{cin>>n;int maxs=(1<<n)-1;for(int i=0;i<n;i++) scanf("%d",&dis[1<<i]);cin>>op;for(int i=0;i<op;i++) scanf("%d",&eyun[i]);f[0]=1;for(int i=1;i<=maxs;i++){int j=i&(-i),k=i;dis[i]=dis[i^j]+dis[j];if(dis[i]==eyun[0]||dis[i]==eyun[1]) continue;while(k){j=k&(-k);f[i]+=f[i^j];if(f[i]>=mod) f[i]-=mod;k^=j;}}printf("%d\n",f[maxs]);return 0;
}
P2396 yyy loves Maths VII 状压dp 变态卡常相关推荐
- [P2396] yyy loves Maths VII
Link: P2396 传送门 Solution: 一眼能看出$O(n*2^n)$的状压$dp$ 但此题是个卡常题,$n=23/24$的时候就别想过了 这题算是提供了一种对状压$dp$的优化思路吧 原 ...
- 洛谷P2396 yyy loves Maths VII【状压dp】
题目:https://www.luogu.org/problemnew/show/P2396 题意:有n个数,每次选择一个表示走$a[i]$步,每个数只能选一次. 最多有两个厄运数字,如果走到了厄运数 ...
- Orz_panda cup I题 (xdoj1117) 状压dp
Orz_panda cup I题 (xdoj1117) 状压dp 1117: Insert Orz Pandas 时间限制: 2 Sec 内存限制: 128 MB 提交: 15 解决: 5 [提 ...
- POJ 1038 Bugs Integrated Inc (复杂的状压DP)
\(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...
- codeforces 8C. Looking for Order 状压dp
题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...
- UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...
- POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...
- 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★
昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...
- hdu 4778 Gems Fight! 状压dp
转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...
最新文章
- 系统SDK介绍-02
- 企业级闪存弥补数据经济价值短板
- iOS更改状态栏前景色背景色
- 【OCP新题库】052最新题库解析-第5题
- 《JavaScript DOM 编程艺术》 读书笔记
- 多维数组(C# 编程指南)
- mysql中出现 xC4 xDD_mysql数据库调优总结(二)
- 微信小程序开发(二)
- 19道Python基础列表元祖的练习题
- ShuffleNet论文阅读笔记
- SAP OData服务性能测量的几种工具和手段
- P3224 [HNOI2012]永无乡(并查集+权值线段树合并/平衡树)
- 整蛊偷快递的家伙!不愧是 NASA 工程师
- jq之toggle()
- CVPR学习(三):CVPR2019-各个方向
- L2TP/IPSec一键安装脚本
- python 化学_rdkit 化学反应分子式高级功能
- 刨根究底字符编码之四——EASCII及ISO 8859字符编码方案
- 指针真的是个小机灵--将字符串中的n个字符左移,串中的前n个字符移到最后
- Hadoop集群性能测试
热门文章
- java 关键字(面试题)
- SQL概念及DDL语句
- hdu2006 求奇数的乘积【C++】
- IntelliJ IDEA 自动编译功能无法使用,On 'update' action:选项里面没有update classes and resources这项...
- 比较ArrayList、LinkedList、Vector
- 利用JS判断是手机端还是PC端 浏览网站
- (一三〇)UITextField的光标操作扩展
- 解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题
- 一些权限管理方面的文章
- shell与 .sh文件与 .bash文件