power oj 1557种树[二进制状压DP]】的更多相关文章

题目链接[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[]; ][]; ];…
题目链接:校内OJ的题目,就不放链接了. PS.可以说是本次9月月赛唯一的一道有一定难度的题目了. 题解: 考虑状压DP,假设 $sta$ 是一个二进制数,代表当前 $n$ 个人有几个是在队伍里的,剩下几个是没在队伍里的. 假设 $dp[sta][h]$:代表了当前 $sta$ 状态下,队伍最尾部那个人的位置的阴影长度为 $h$,此时整个队伍的暴躁值. 状态转移方程参见代码. (状压DP的题解真的巨特喵难写,懒人就只能这么写写了……) AC代码: #include<bits/stdc++.h>…
题目链接[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…
题目链接[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种,如果第一行的状态确定了,其他行的开关状态也就…
题面 传送门 分析 刚看到这道题时想的是跟最短哈密顿路类似的二进制状压DP,先用floyd处理距离 但是此题用二进制不够,应该用三进制 0,1,2分别表示未送,正在送,已送完 dp[s][i]表示当前送到任务状态为s,现在在点i 状态转移方程见代码 时间复杂度\(O(n^3+3^qqn\) 代码 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define…
很显然这是一道状压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() {…
题目大意: 有N个男人,和N个女人要互相匹配,每个男人和每个女人有个匹配值. 并且匹配只能是1对1的. 问所有人都匹配完成,最大的匹配值是多少?   状压DP,暴力枚举就OK了, 这个题目略坑,因为他卡常数,可以有一些简单的优化,能优化1500ms............. =================================================================   #include<cstdio> #include<cstring> #i…
题目链接Click Here [题目描述] 假如你是一个黑客,侵入了一个有着\(n\)台计算机(编号为\(1.2.3....n\))的网络.一共有\(n\)种服务,每台计算机都运行着所有服务.对于每台计算机,你都可以选择一项服务,终止这台计算机和所有与它相邻计算机的该项服务(如果其中一些服务已经停止,那他们继续保持停止状态).你的目标是让尽量多的服务完全瘫痪(即:没有任何计算及运行着该服务) [输入格式] 输入包含多组数据,每组数据的第一行为整数\(n(1<=n<=16)\):以下\(n\)行…