描述 给定 n 根木棍,第 i 根长度为 ai 现在你想用他们拼成尽量多的面积大于 0 的三角形,要求每根木棍只能被用一次,且不能折断 请你求出最多能拼出几个 输入 第一行一个正整数 n 第二行 n 个正整数 a1 … an 1 ≤ n ≤ 15 1 ≤ ai ≤ 109 输出 输出最多能拼出几个三角形 样例输入 6 2 2 3 4 5 6 样例输出 2 思路:最开始一直在像贪心,最后没写出来. 我们要知道的是,并不是每次都选择长度相邻的三个. 因为最小的一条边可能还不够小导致了浪费. 状压DP…
三角形棋盘上的博弈游戏 题目连接: http://mozhu.today/#/problem/show/1402 Description 柱爷有天上课无聊,于是和同桌卿学姐一起下一种奇特的棋: 棋盘如图: 在开始游戏前,棋盘上已经放好了一些边,然后柱爷先手,开始在棋盘上没有边的位置添加一条边上去 如果添加边后围成一个三角形则获得一分(对于棋盘上游戏开始前已经围好了的三角形,两个人都不得分)并且下一轮还该他!否则下一轮该另一个人. 如果两个人都以最优策略下棋,那么柱爷能赢么? 注:只算最小的三角形…
题目链接:http://hihocoder.com/problemset/problem/1608 题解:就是一道简单的状压dp由于dfs过程中只需要几个点之间的转移所以只要预处理一下几个点就行. #include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; << ]; ][] , dr[][] = { , , - ,…
原题: HDU 3362 http://acm.hdu.edu.cn/showproblem.php?pid=3362 开始准备贪心搞,结果发现太难了,一直都没做出来.后来才知道要用状压DP. 题意:题目给出n(n <= 18)个点的二维坐标,并说明某些点是被固定了的,其余则没固定,要求添加一些边,使得还没被固定的点变成固定的,可见题目中的图形sample. 由于n很小,而且固定点的顺序没有限制,所以需要用状态压缩DP. 注意:1.当一个没固定的点和两个固定了的点连接后,该点就被(间接)固定了(…
Fighting for Triangles 题目连接: http://codeforces.com/gym/100015/attachments Description Andy and Ralph are playing a two-player game on a triangular board that looks like the following: 1 2 3 4 5 7 8 6 9 10 11 13 14 16 17 12 15 18 At each turn, a playe…
这里有状态压缩DP的好博文 题目:题目比较神,自己看题目吧 分析: 大概有两种思路: 1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过. 2.状压DP,先预处理出所有可以组成正方形的方案,根据题目的数据范围计算不会超过100个正方形方案.n个正方形用二进制的方式记录,每一位记录是否有没有引爆,则状态转移比较明显了. #include <set> #include <map> #include <list> #include…
题意:给定n,m的矩阵,就是求稳定的骨牌完美覆盖,也就是相邻的两行或者两列都至少有一个骨牌 分析:第一步: 如果是单单求骨牌完美覆盖,请先去学基础的插头dp(其实也是基础的状压dp)骨牌覆盖 hihocoder有全套课程:骨牌覆盖(一, 二,三),状态压缩(二) 学好了以后,首先打一个预处理没有限制的表,由于赛后补题,我就没自己打,直接从网上粘的表 我的表来自:http://blog.csdn.net/u012015746/article/details/51971977 第二步: 这就是容斥的…
传送门 状压dp好题. 考虑对于两个给出的集合. 如果没有两个元素和相等的子集,那么只能全部拼起来之后再拆开,一共需要n1+n2−2n1+n2-2n1+n2−2. 如果有呢? 那么对于没有的就是子问题了. 因此我们要最大化这样的子集数. 这就需要状压dp了. 我们把两个集合拼成一个,然后第二个集合合并进去的时候权值取负的,这样如果某个子集元素和为0表示该子集和满足要求. 然后枚举一下之前的状态来转移就行了. 代码: #include<bits/stdc++.h> using namespace…
给定\(n\)个点,\(m\)条边的带权无向图 选出一些边,使得\(4\)对点之间可达,询问权值最小为多少 \(n \leqslant 30, m \leqslant 1000\) 首先看数据范围,\(4\)对点,也就是\(8\)个点,很小 上斯坦纳树(局部最小生成树) 然而好像题目并不是斯坦纳树,可能是一些树拼到一起 那么就再做一个状压\(dp\)即可 复杂度\(O(3^8 * n + 2^8 * nm + 2^{12} * n)\) #include <map> #include <…
上个月写的题qwq--突然想写篇博客 题目: 洛谷4294 分析: 斯坦纳树模板题. 简单来说,斯坦纳树问题就是给定一张有边权(或点权)的无向图,要求选若干条边使图中一些选定的点连通(可以经过其他点),且边权(或点权)之和最小.很明显,这样最终形成的是一棵树. 通常,斯坦纳树问题规模都比较小.考虑状压DP.用\(dp[u][S]\)表示让点\(u\)与集合\(S\)中所有关键点连通的最小花费.有如下两种转移: 第一,把两条到\(u\)的路径拼在一起,减去重合点\(u\)的点权,即(\(w_u\)…