链接:http://poj.org/problem?id=1185
题意:一个地图上有两种地形,H和P,P上可以放一个炮,攻击范围是上下左右各两格,问的是最多可以再地图上放多少个炮。行N
思路:因为上下左右各两格内不能放置炮,所以每一行的状态数从2^10减少到60种。状态转移方程为:dp[i][j][k]=max(dp[i-1][k][l]+bb[j])。dp[i][j][k]表示在第i行状...
分类:
其他好文 时间:
2014-07-21 16:21:13
阅读次数:
272
DP不仅广泛用于各种最优化问题,也常常用于排列组合的个数、概率期望计算等等,因为这些问题往往具有很好的“ 重叠子问题”特性,这些问题往往都起源于排列组合中的组合公式A(n, k) = A(n-1, k) + A(n-1, k-1)
例一:求解划分数
有n个无差别的物品,将他们划分成不超过m组,求划分方法数除以M的余数。
分析:dp[i][j]j的i划分的总数
dp[i][j] = ...
分类:
其他好文 时间:
2014-07-21 15:48:06
阅读次数:
268
链接:http://poj.org/problem?id=3254
题意:一块M*N的田地,每小块地大小是1*1,可以种植物的标记为1,不可以种植物的标记为0,并且相邻的两块地不可以同时种植物。问题是有多少种不同的种植方案(所有地都不种也是一种种植方案)
思路:这是第一道状压DP题,从第一行更新到最后一行,每一行用一个N位的二进制数来表示该行的状态1表示该位置种了植物,0表示该位置没种植物。因...
分类:
其他好文 时间:
2014-07-19 23:46:58
阅读次数:
387
#include #include using namespace std;#define mod 100000000int M,N,top=0;int cur[20],dp[20][600];int state[600],num[110];bool ok(int x){ if(x&x<<1)...
分类:
其他好文 时间:
2014-07-16 18:57:07
阅读次数:
229
用dfs,累加答案,或者什么的。他可能还会有一些限制,加点判断就好。sgu 131#include using namespace std;#define LL long long int n, m, i;LL f[10][512]; void dfs(int j, int opt1, int op...
分类:
其他好文 时间:
2014-07-16 18:55:55
阅读次数:
186
题目链接:
题意:给定n个矩阵(底边总是贴着x轴)
然后找到一条包围在矩阵上方的路径,输出路径上的点
给定n
下面n行给定 y [x1, x2] 表示矩阵的高度和2个x轴坐标
思路:
扫描线维护每段区间的线段 最大的y值
则我们访问每个x轴坐标,就相当于访问x轴坐标向右最短的那个小区间上的最大y值。
则可以得到[x,y] 和 [x+1, y] 这样2个点
当我们发现存在高度差时(...
分类:
其他好文 时间:
2014-07-16 14:07:19
阅读次数:
245
题目链接:点击打开链接
题意:
给定13张各不相同的扑克牌,问最少需要几手打出
每手打出的牌必须符合以下任意标准之一:
1、任意单张
2、相同数字2张
3、相同数字3张
4、相同数字4张
5、相同数字3张+相同数字2张
6、连续5个及5个以上的数字
思路:
状压dp,dp[i]表示选了i的状态的最小牌数
然后要预处理出能一次打出的状态,这样不会t。。
#inclu...
分类:
其他好文 时间:
2014-07-15 22:45:44
阅读次数:
341
题目链接:uva 11825题意:你是一个黑客,侵入了n台计算机(每台计算机有同样的n种服务),对每台计算机,你能够选择终止一项服务,则他与其相邻的这项服务都终止。你的目标是让很多其它的服务瘫痪(没有计算机有该项服务)。思路:(见大白70页,我的方程与大白不同)把n个集合P1、P2、Pn分成尽量多的...
分类:
其他好文 时间:
2014-07-13 11:07:49
阅读次数:
182
HDU 4856 Tunnels
题目链接
题意:给定一些管道,然后管道之间走是不用时间的,陆地上有障碍,陆地上走一步花费时间1,求遍历所有管道需要的最短时间,每个管道只能走一次
思路:先BFS预处理出两两管道的距离,然后状态压缩DP求解,dp[s][i]表示状态s,停在管道i时候的最小花费
代码:
#include
#include
#include
#inc...
分类:
其他好文 时间:
2014-07-09 11:01:43
阅读次数:
263
题意:给你N*N的网格,‘.’表示可以走,‘#’表示不能走,m条管道,每条管道有起点和终点坐标,
Bob每次可以走到相邻的网格花费1s,问Bob走完m条管道要花多少时间;Bob在管道内不计算时间
即计算Bob从管道 i 的出口走到管道 j 的入口的时间Dis(e[i],s[j])的最小和,起点可以任意;
思路:看了题解说是状态压缩DP然后深入理解了下。
首先...
分类:
其他好文 时间:
2014-07-09 10:14:02
阅读次数:
234