hihocoder #1608 : Jerry的奶酪(状压DP)】的更多相关文章

传送门 题意 分析 设dp[i][j]为在i状态下当前在第j个奶酪的最小费用 转移方程:dp[(1<<k)|i][k]=dp[i][j]+d[j][k] 预处理出每个奶酪之间的距离,加入起点与终点 不以获取奶酪为目标的移动是无意义的 预处理出起点.终点以及奶酪之间的最短路径…
题目链接:http://hihocoder.com/problemset/problem/1608 题解:就是一道简单的状压dp由于dfs过程中只需要几个点之间的转移所以只要预处理一下几个点就行. #include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; << ]; ][] , dr[][] = { , , - ,…
题目描述 分析 比较简单的状压DP 我们设\(f[i][j]\)为当前的状态为\(i\)且当前所在的位置为\(j\)时走过的最小距离 因为老鼠的坐标为\((0,0)\),所以我们要预处理出\(f[1<<(i-1)][i] (1 \leq i \leq n)\)的值 同时在读入的时候顺便处理处任意两个奶酪之间的距离 下面是状态转移方程 for(int i=1;i<(1<<n);i++){ for(int j=1;j<=n;j++){ if((i&(1<<…
http://hihocoder.com/problemset/problem/1044 可以看出来每一位的选取只与前m位有关,我们把每个位置起始的前m位选取状态看出01序列,就可以作为一个数字来存储,那么将其作为状态,dp[i][j]就是第i个座位前m个座位选取情况为j的最大垃圾处理量.然后取这个序列的后m-1位,和当前位取0/1的情况分别做合法性判断,然后做状态转移即可. #include <iostream> using namespace std; ; ; ]; int n,m,q;…
题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块奶酪的坐标. 两点之间的距离公式=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) 输出格式: 一个数,表示要跑的最少距离,保留2位小数. 输入输出样例 输入样例#1: 复制 4 1 1 1 -1 -1 1 -1 -1 输出样例#1: 复制 7.41 #include<iost…
思路:状态压缩,dp(i, j)表示考虑前i个数且[i-m+1, i]的选择情况为j.如果要选择当前这个数并且,数位1的个数不超过q,则dp[i+1][nex] = max(dp[i+1][nex], dp[i][j] + w[i+1]),如果不选择dp[i+1][j>>1] = max(dp[i+1][j>>1], dp[i][j]); AC代码 #include <cstdio> #include <cmath> #include <cctype&…
嗯?这题竟然是个绿题. 这个题真的不(很)难,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的状压dp就可以了. 是的状压dp. 这个题的数据加强了,早已经不是搜索可以驾驭的了. 搜索的效率实在是有点低,我来算一个不准的效率,搜索的效率应该是O(n!).应该是吧. 状压dp只需要短短的O(2^n*n*n就可以了).状态共有2^n*n个,每次查找下一步需要O(n)的效率,所以状压dp的效率是O(2^n*n*n). 状压dp用一个二进制数表示哪…
吃 奶 酪 吃奶酪 吃奶酪 题目描述 房间里放着 n n n 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 ( 0 , 0 ) (0,0) (0,0)点处. 输入 第一行有一个整数,表示奶酪的数量 n n n. 第 22 到第 ( n + 1 ) (n+1) (n+1) 行,每行两个实数,第 ( i + 1 ) (i + 1) (i+1) 行的实数分别表示第 i 块奶酪的横纵坐 x i , y i x_i,y_i xi​,yi​ 输出 输出一行一个实数,表示要跑的最少距离,…
描述 给定 n 根木棍,第 i 根长度为 ai 现在你想用他们拼成尽量多的面积大于 0 的三角形,要求每根木棍只能被用一次,且不能折断 请你求出最多能拼出几个 输入 第一行一个正整数 n 第二行 n 个正整数 a1 … an 1 ≤ n ≤ 15 1 ≤ ai ≤ 109 输出 输出最多能拼出几个三角形 样例输入 6 2 2 3 4 5 6 样例输出 2 思路:最开始一直在像贪心,最后没写出来. 我们要知道的是,并不是每次都选择长度相邻的三个. 因为最小的一条边可能还不够小导致了浪费. 状压DP…
题意:给定n,m的矩阵,就是求稳定的骨牌完美覆盖,也就是相邻的两行或者两列都至少有一个骨牌 分析:第一步: 如果是单单求骨牌完美覆盖,请先去学基础的插头dp(其实也是基础的状压dp)骨牌覆盖 hihocoder有全套课程:骨牌覆盖(一, 二,三),状态压缩(二) 学好了以后,首先打一个预处理没有限制的表,由于赛后补题,我就没自己打,直接从网上粘的表 我的表来自:http://blog.csdn.net/u012015746/article/details/51971977 第二步: 这就是容斥的…