Petya and Spiders【二进制状压】】的更多相关文章

题目链接[http://codeforces.com/problemset/problem/111/C] 题意:给出大小为N*M的图(1 ≤ n, m ≤ 40, n·m ≤ 40),每个图中有一个蜘蛛,每个蜘蛛有5种运动状态,不动,向上下左右移动.问蜘蛛如何移动才能使得图中的空地数最大,输出最大空地数. 题解:虽然(1 ≤ n, m ≤ 40, n·m ≤ 40),但是当(n<m)的时候可以swap(n,m),对结果是没有影响的.用一个二进制数表示每一行的每个位置的状态.最多有(1<<…
题目链接[https://www.oj.swust.edu.cn/problem/show/2480] 题意:中文题目. 题解:二进制状态转移+坏点判断. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; << ; LL dp[][maxn]; ]; ]; int n, m; int cur; void DFS(i…
题目链接[https://www.oj.swust.edu.cn/problem/show/1557] 题意:中文题目. 题解:用0,1表示某个位置是否种了树,先算出同一行的有效状态的总数,即开两个1状态不能相邻的状态. 枚举每一行的状态然后根据行一行的状态判断改状态是否有效,然后对最后一行的所有有效状态求最大值即可. #include<bits/stdc++.h> using namespace std; typedef long long LL; ], k[], N[]; ][]; ];…
题目链接[http://poj.org/problem?id=2411] 题意:给出一个h*w的矩形1<=h,w<=11.用1*2和2*1的小矩形去填满这个h*w的矩形,问有多少种方法? 题解:第一步把第0行全部置1,达到这种状态的方案数是1.然后对于r排,根据r-1排的状态处理r排的状态.如果r-1排的pos位置为0,即没有没木块占用,那么r排的pos位置必须竖着放木块. 总的来说是,在处理r排的时候,要先把r-1排填满,然后剩下的位置就随意填(用DFS实现).dp[i][j]表示:到达的i…
题目链接[http://poj.org/problem?id=3279] 题意:给出一个大小为M*N(1 ≤ M ≤ 15; 1 ≤ N ≤ 15) 的图,图中每个格子代表一个灯泡,mp[i][j] = 0;表示(i,j)这盏灯灭,反之则亮.如果把反转(i,j)等的开关,那么这个灯和他上下左右的等都会变成原来相反的的状态. 问:用最少的使用开关的次数使得灯全部被熄灭. 思路:用0,1表示第一行每个位置是否使用开关,所有状态最多有(1<<15)-1种,如果第一行的状态确定了,其他行的开关状态也就…
好,这个想法是我想拿去做HH的项链的.但是那个颜色有十万种...直接爆. 做这个倒是so easy 被两个地方坑了.1,a,b可能大小相反. 2,ask之前要down一波,我没down就挂了...... 注意要把+换成 | #include <cstdio> #include <iostream> #include <algorithm> using namespace std; struct Node { ,tag=; }node[]; void build(int…
题目链接Click Here [题目描述] 假如你是一个黑客,侵入了一个有着\(n\)台计算机(编号为\(1.2.3....n\))的网络.一共有\(n\)种服务,每台计算机都运行着所有服务.对于每台计算机,你都可以选择一项服务,终止这台计算机和所有与它相邻计算机的该项服务(如果其中一些服务已经停止,那他们继续保持停止状态).你的目标是让尽量多的服务完全瘫痪(即:没有任何计算及运行着该服务) [输入格式] 输入包含多组数据,每组数据的第一行为整数\(n(1<=n<=16)\):以下\(n\)行…
状压DP,依靠的是把状态用某种压缩方式表示出来进而DP,大多数时候是二进制状压. 直接看例题吧. 一双木棋     九尾狐吃棉花糖     islands and bridges 愤怒的小鸟   芯片   car  宝藏 发现一个问题... 我写的状压DP全TM是求极值的!!!没有一个是求方案数的...... 这不可...赶快补...... 广场铺砖问题   硬木地板  互不侵犯…
Description The 11th Zhejiang Provincial Collegiate Programming Contest is coming! As a problem setter, Edward is going to arrange the order of the problems. As we know, the arrangement will have a great effect on the result of the contest. For examp…
说到状压dp,一般和二进制少不了关系(还常和博弈论结合起来考,这个坑我挖了还没填qwq),二进制是个好东西啊,所以二进制的各种运算是前置知识,不了解的话走下面链接进百度百科 https://baike.baidu.com/item/%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97/7224729?fr=aladdin 现在我就当你明白了所有前置知识点了 状压dp就是通过一系列操作(例如用二进制)复杂的状态进行压缩,然后转移 现在我们来一道板子题感受一下状压dp https…
题目大意:给你一个序列,你可以在序列中任选一个子序列,求子序列每一项的积是一个平方数的方案数. 1<=a[i]<=70 因为任何一个大于2的数都可以表示成几个质数的幂的乘积 所以我们预处理70以内的质数,把它作为二进制状压的状态,每个在序列中出现数Hash一下,组合数推一下 所以把奇次幂的状态表示为1,偶次幂的状态就是0,比如6就是11,42就是1011 而平方数的每个质因子的指数都是偶数,所以最终结果的状态就是0000000... 转移的过程,两个数的乘积,就是这两个数的质因子二进制的状态的…
题目链接:传送门 思路: 由于只能翻转一次子串,就相当于找出两个不连续的子串,把在后面的一个子串翻转过来,和第一个子串拼接. 因为题目仅要求子串中的字符不重复,所以字符的先后顺序无关,翻转的操作就相当于: 选出两个不连续的子串,且他们没有相同的字符,两个子串的长度之和就是答案的一种可能. 题目中反复强调,给出的字符串只有前20个字母[a, t],考虑到$2^{20} = 10^{6}, 2^{26} = 6*10^{7}$,显然在疯狂暗示:要用状压来做这题. 所以考虑二进制状压字符集合. 一个朴…
链接:https://ac.nowcoder.com/acm/contest/946/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262875K,其他语言525750K 64bit IO Format: %lld 题目描述 筱玛是一个热爱阅读的好筱玛,他最喜欢的事情就是去书店买书啦! 一天,他来到一家有 n n本书的书店,筱玛十分快乐,决定把这家店里所有的书全部买下来. 正巧今天店里在搞促销活动,包含若干个促销方案.每个促销方案是由指定的若干本书构成的集合,…
题面 传送门 分析 刚看到这道题时想的是跟最短哈密顿路类似的二进制状压DP,先用floyd处理距离 但是此题用二进制不够,应该用三进制 0,1,2分别表示未送,正在送,已送完 dp[s][i]表示当前送到任务状态为s,现在在点i 状态转移方程见代码 时间复杂度\(O(n^3+3^qqn\) 代码 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define…
T1 传送门 解题思路 发现有一个限制是每个字母都必须相等,那么就可以转化成首尾的差值相等,然后就可以求出\(k-1\)位的差值\(hash\)一下.\(k\)为字符集大小,时间复杂度为\(O(nk)\). 代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<map> using namespace std; typedef unsig…
很显然这是一道状压dp的题目 由于每个最优子结构和前两行有关,一个显而易见的想法是用三维dp[i][j][k]用来记录在第i行下为j状态,i - 1行为k状态时的最大值,然而dp[100][1 << 11][1 << 11]显然是要MLE的,我们可以想到用滚动数组优化,事实上确实可以用滚动数组优化.然而 在时间复杂度上 100 * 1024 * 1024 * 1024也是一个不可能补TLE的数字,一个不那么显然的办法是预处理出所有可行的状态,经过看题解或者写个暴力炸一下之后可以知道…
#include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define maxn 100000 using namespace std; int F[1 << 16], s[1 << 16], v[1 << 16], f[1 << 16]; int n, D, k, tot = 0, ans = 0; int main() {…
比较简单的状压 dp,令 $f[S][i]$ 表示已经经过的点集为 $S$,且最后一个访问的位置为 $i$ 的方案数. 然后随便转移一下就可以了,可以用 $lowbit$ 来优化一下枚举. code: #include <bits/stdc++.h> #define N 21 #define LL long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; const…
题目描述 小w偶然间见到了一个DAG.这个DAG有m层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有k个节点.现在小w每次可以取反第i(1<i<n-1)层和第i+1层之间的连边.也就是把原本从(i,k1)连到(i+1,k2)的边,变成从(i,k2)连到(i+1,k1).请问他有多少种取反的方案,把从源点到汇点的路径数变成偶数条?答案对998244353取模. 输入描述 一行两个整数m,k.接下来m-1行,第一行和最后一行有k个整数0或1,剩下每行有k2个整数0或1,第(j-1)×…
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][Status][Discuss] Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K &…
Escape Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 9430    Accepted Submission(s): 2234 Problem Description 2012 If this is the end of the world how to do? I do not know how. But now scient…
Relocation Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2631   Accepted: 1075 Description Emma and Eric are moving to their new house they bought after returning from their honeymoon. Fortunately, they have a few friends helping them…
ZOJ Monthly, August 2014 E题 ZOJ月赛 2014年8月 E题 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5334 Easy 2048 Again Time Limit: 2 Seconds      Memory Limit: 65536 KB Dark_sun knows that on a single-track road (which means once he passed this…
http://poj.org/problem?id=3254 Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7588   Accepted: 4050 Description Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parc…
题目传送门 题意:从某个点出发,所有点都走过且最多走两次,问最小花费 分析:数据量这么小应该是状压题,旅行商TSP的变形.dp[st][i]表示状态st,在i点时的最小花费,用三进制状压.以后任意进制状压都会了. #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int N = 11; int dp[60000][10]; int bit[N]; int d[N][N]; int p[…
http://www.wikioi.com/problem/2800/ 本题状压莫名其妙的tle了,(按照hzwer大神打的喂,他1000多ms,我就2000ms了?) (14.8.7更,将getnum换成scanf就能ac,这是啥节奏??????????????????????????????????数据有问题啊喂?? 明天再来看看吧..估计写挫了. 本题先用floyd跑完点之间的最短路,设状态f[i][j]表示访问情况为i的时候现在所在的点为j的最小值,有 f[i][j]=min(f[i-b…
炮兵阵地 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 26426   Accepted: 10185 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图.在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队):一支炮兵部队在地图上的攻…
Pieces Assignment My Tags   (Edit)   Source : zhouguyue   Time limit : 1 sec   Memory limit : 64 M Submitted : 539, Accepted : 190 Background 有一个n*m的棋盘(n.m≤80,n*m≤80)要在棋盘上放k(k≤20)个棋子,使得任意两个棋子不相邻(每个棋子最多和周围4个棋子相邻).求合法的方案总数. Input 本题有多组测试数据,每组输入包含三个正整数n…
云峰菌曾经提到过的黄老师过去讲课时的摆砖块 那时百度了一下题目 想了想并没有想好怎么dp 就扔了 这两天想补动态规划知识 就去FZU做专题 然后又碰到了 就认真的想并且去做了 dp思想都在代码注释里 思想是很好想的..唯一的难点大概是 c++里面没有同或这种东西 得自己写 而我又不怎么会位运算 问了蕾姐半天也没搞懂怎么用~这个取反符号 到最后怒而手写了函数 一开始想的是 init后 输入nm都可以秒出 但是在使用~的路途上 发现至少我的方法 做这个题 不能做到init后随便输入 因为 每行 都有…
题目链接 The input contains mutiple testcases. Please process till EOF.For each testcase, the first line contains two integers N (1 ≤ N ≤ 15), the side length of the square map and M (1 ≤ M ≤ 15), the number of tunnels.The map of the city is given in the…