A了一整天~~~终于搞掉了. 真是血都A出来了. 题目意思很清楚,肯定是状压DP. 我们可以联系一下POJ 1185  炮兵阵地,经典的状压DP. 两道题的区别就在于,这道题的攻击是可以被X挡住的,而且攻击的范围不同. 这是这道题的攻击范围. 但是这个攻击范围是会被X挡住的. 所以得在1185上加以改进. 分析: POJ 1185,因为可以隔着障碍物打,所以他每行的状态是一样的,但是这题由于攻击会被挡住,所以每行的状态是不一样的,所以我们预处理的时候就要处理出每一行的状态数,分别保存,然后存下每…
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 Time Limit: 2 Seconds      Memory Limit: 65536 KB The 11th Zhejiang Provincial Collegiate Programming Contest is coming! As a problem setter, Edward is going to arrange the order…
如果您的电脑比较优秀能在 1sec 内跑过 2^1000 的时间复杂度,不妨你可以尝试一下,其实实际时间复杂度远远少于 2^1000,作为骗分不错的选择QAQ,然后我们来分析一下正解: 很显然此题是一题裸的状压Dp,一看数据范围就知道了,所以状态变得很显然了 f[i][j][k] 表示到第 i 层前一层是 j 上上层是 k 的最大炮兵数. 所以转移就很显然:f[i][j][k]=max{f[i-1][k][q]+Num[j]} (Num[j] 表示第 j 行的炮兵数) 显然时间复杂度变为了O(n…
Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 16771   Accepted: 9683 Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series…
炮兵阵地 题目链接 题目大意:在n*m的地图上放置炮兵,每个炮兵的攻击范围是上下左右两格内,有两种不同的地形,山地(用"H" 表示),平原(用"P"表示),只有平原可以布置炮兵,在不冲突的前提下最多可以布置多少炮兵? 这道题非常经典,我们用dp[i] [j] [k]表示第i行在第j种选取状态下,第i-1行在第k种选取状态下前i行最多摆放的炮兵数量.然后我们首先预处理每一行所有的合法状态,以降低时间复杂度.用num[i]表示第i行的合法状态数量,state[i] [j…
题目大意:不超过10种气体,两两之间相互碰撞可以产生一定的能量,如a碰b,那么b气体就消失,自身不能碰自身,问最后所能得到的最大能量. 原代码链接:http://blog.csdn.net/accry/article/details/6607703 题解:感觉这个题是我做状态压缩的几个题中最简单的了,这存图用a数组就可以了,也不用处理a数组(有的求路径的题要用弗洛伊德处理原数组),因为碰撞是不可逆的. 接着就用s开始从0枚举状态到1<<N-1,还要注意去掉不可能的情况!! AC代码: #inc…
0出发 每个顶点经过一次 回到0 最小花费. O($n^2 \times 2^n$) 记忆化搜索: // s: 已经访问过的节点状态 v: 出发位置 int dfs(int s, int v) { ) return dp[s][v]; <<n)- && v==) // 所有都走过 并 回到0 ; int ans=INF; ;u<n;u++) ))) // u没走过 则走到u ans=min(ans, dfs(s | (<<u), u)+mp[v][u]); r…
hihocoder题解说的十分清晰了,这份代码就是从讲解里学习的 方案数就是不断枚举合法状态下横放竖放或两者均可 合法判断的依据是记录当前行和下一行的状态 防止重复枚举的方法是先按行后按列 递归基瞎写的,递归结束仅在倒数第二行或倒数第一行,注意最后一行只需判断当前行放满即可 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cstdlib…
题目描述 某乡有n个村庄(1 输入格式: 村庄数n和各村之间的路程(均是整数). 输出格式: 最短的路程. 输入样例: 3 0 2 1 1 0 2 2 1 0 输出样例 3 说明 输入解释 3 {村庄数} 0 2 1 {村庄1到各村的路程} 1 0 2 {村庄2到各村的路程} 2 1 0 {村庄3到各村的路程} 题目分析 又是一道状压DP经典 我们以一串二进制数表示村庄的集合(状态) 1表示该村庄访问过,0表示没有 定义dp[i][j]表示 从起点到第j号点 且到达时状态恰好为i的最短路 则最后…
描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图.在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队):一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格.图上其它白色网格均攻击不到.从图上可见炮兵…