DP
文章平均质量分 71
ThunderSei
这个作者很懒,什么都没留下…
展开
-
POJ 3311 旅行商问题 状态压缩
求走过所有点并回到原点的最短路,可以走一个点多次.因为可以走一个点多次,所以,可以先求出每两个点之间的最短路,然后用经典的旅行商问题的状态压缩DP做法。旅行商问题的状态压缩DP状态压缩还是 状态 阶段 答案状态就是已经走过的点,阶段就是现在在哪一个点,答案就是从这个点出发遍历剩下的点,并且回到原点的最短路是多少。一开始我有一个疑问,为什么一定能从剩下的点回到原点?这是因为一开始原创 2013-11-15 09:45:47 · 1802 阅读 · 0 评论 -
POJ 3254 简单状态压缩DP
现在对简单题的态度也变了,觉得简单题未必不能帮助你提高。简单题往往更裸,更能单独体现某一个知识点或者技巧。而复杂题目往往是几种技巧的组合使用。这是一道入门的状态压缩DP。在一个棋盘上选择一些不相邻的点(上下左右),求这些点的总数。有一些点不可选。首先把每行可能的状态保存下来。存在state里面,因为限制了不相邻,所以这样一轮筛选之后单行的状态数就已经少了很多。然后对每一行i 枚举所原创 2013-11-06 16:59:20 · 538 阅读 · 0 评论 -
POJ1185 状态压缩DP 又是一道有意义的水题
之前做过POJ3285,那道题下一行的状态只和上一行有关,所以每一行只需要记录一行的状态。这一个炮兵阵地,炮可以打两行,所以不仅仅与上一行有关,还与上上一行有关,所以每一行的状态都由上两行状态推出,因为要记录两个状态,所以用了一个三维的dp,dp[i][j][k],表示第i行状态为state[k],第i-1行状态为state[j]时前I行最多有几个炮兵。写的时候一开始在初始化的时候没有原创 2013-11-07 10:42:22 · 662 阅读 · 0 评论 -
UVA 111 LCS
注意他给的是第n个事件的顺序,不是按事件的顺序给的....#include#include#includeusing namespace std;int s[100];int t[100];int dp[100][100];int lcs(int n){ memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { for原创 2013-11-23 19:11:37 · 620 阅读 · 0 评论 -
uva 10131 大象。
就是一个最长上升子序列而已。状态转移的时候注意一下必须是严格递增的就好#include#include#include#include#includeusing namespace std;struct P{ int i; int w; int s; P() { i=-1; s=0; }原创 2013-11-25 12:06:04 · 511 阅读 · 0 评论 -
UVA 10066 shuangzita...
//lun lcs de zhong yao xing ....#include#include#includeusing namespace std;int dp[102][102];int n1,n2;int a[200];int b[200];int lcs(){ memset(dp,0,sizeof(dp)); for(int i=1;i<=n1;i++) {原创 2013-11-25 13:36:21 · 692 阅读 · 0 评论 -
状态压缩DP
怎么确定状态 微观状态 一般都是一堆0101010来表示某位置用或者不用 宏观状态 一般都是用数字来表示微观状态用了几个1 还有状态的阶段。 比如,要计算棋盘上放置K个国王令其不能互相攻击的问题 dp[i][j][s] 就表示第i行状态为S时前i-1行放了j个国王原创 2013-11-14 00:38:44 · 534 阅读 · 0 评论 -
SGU223 状态压缩DP
问在棋盘上放置K个国王,让其不能够互相攻击的放置方法有多少种国王可以攻击周围的8个格子dp[i][j][k] 表示前i行防止j个国王,且第i行状态s的情况下放置的方案数。状态压缩dp的关键一是找到完整的描述状态的方式 本题不但要描述最后一行,还要描述现在总共放置了多少个国王关键二是找出合法的状态转移方式。本题中一行中可能的状态方式先枚举出来10的时候总共不过200,然后把每种可能的原创 2013-11-14 14:31:51 · 623 阅读 · 0 评论