DP
swust_lian
无武
展开
-
HDU 4856 Tunnels(状压DP)
题意:给出一个城市地图(n*n),在给出m条管道。目的是可以从任意管道入口走,走完所有的管道路程最少。 分析:说白了就是访问管道顺序的问题,由于管道数量m #include #include #include #include #include #include #include #include #include #include using namespace std; #define M原创 2016-01-17 17:08:11 · 419 阅读 · 0 评论 -
POJ2955 Brackets(区间dp)
题意:给出一个括号的字符串,可以任意抽出一些子串,保持它们相对位置不变,并能组成匹配的括号,问最长能提取出几个字符。 解:区间DP 用 dp[i][j] 表示 i~j 这个区间内的最大括号匹配数。 如果 s[i] 和 s[j] 匹配,那么很明显有 dp[i][j] = dp[i+1][j-1] + 2; 如果 s[i] 和 s[j] 不匹配,那么我们可以在 i~j 中找一个断点原创 2016-01-28 19:36:41 · 291 阅读 · 0 评论 -
poj 1651 Multiplication Puzzle (区间DP)
题意:给出n个数,每次你可以取出一个数a[i](不能取边界),并得到一个值val=a[i-1]*a[i]*a[i+1]。要求取完所有的数最后剩下边界,你得到的值总和最少。 解: dp[i][j]:i~j这个区间的最优解。 当只有三个数时,val=a[1]*a[2]*a[3]。dp[1][3]=val; 当只有四个数时,dp[1][3]、dp[2][4]可以直接得到,那么dp[1][4]等于原创 2016-01-29 11:31:29 · 280 阅读 · 0 评论 -
poj 2663 (轮廓线dp)
int main() { int cur,n,i,j,k,m; int dp[2][35]; while(scanf("%d",&n)!=EOF) { if(n==0) { puts("1");continue; } if(n==1) {原创 2016-04-03 18:43:24 · 356 阅读 · 0 评论 -
POJ 3420 (矩阵二分幂优化,状压DP)
由于n 以上式子是线性的关系,显然可以构造矩阵。 #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MAXN 16 #define LL __int64 const int INF=0x3f原创 2016-04-04 16:05:38 · 324 阅读 · 0 评论 -
HDU 4455 Substring(DP)
如样例: 1 1 2 3 4 4 5; 明显dp[1]=n=7; 长度为1的时候有7个区间。 从长度为1到长度为2,就是把前6个区间往后增加一个数,最后一个元素不能构成长度为2的区间。 增加的6个数要看在该区间是否出现过,只要看它上一个相等的元素距离是否大于2 所以dp[2]=dp[1]-1+4; 以此类推就可以得出所以的dp值了。 dp[i]=dp[i-1]-A +B;原创 2016-05-16 20:10:45 · 365 阅读 · 0 评论 -
POJ 2486 Apple Tree (树形dp)
题意:有一颗苹果树,n个点,n-1条边,每个节点有val[i]个苹果,从根开始走,问最多走k步,能摘得的苹果最大是多少。 分析:树形dp+01背包。 ① dp[i][j][0]: 对于第i节点,它走j不回来的状态能得到最大苹果。 ② dp[i][j][1]: 对于第i节点,它走j回来的状态能得到最大苹果。 对于①它可以从u点的其他儿子节点回来后,再走v点不回来,只需多花原创 2016-08-09 15:37:38 · 334 阅读 · 0 评论 -
HDU 5115 Dire Wolf (区间DP) 2014 ACM/ICPC 北京站
题意:狼在一行,每只狼有一个伤害A,还有buff加成伤害B,即每只狼会给相邻的狼加伤害,如果杀死中间的只狼,它两边的狼就相邻了。杀死一只狼的时候,会受到这只狼的伤害A和这只狼两边的狼的伤害B的和。求杀掉一排狼的最小代价。 解法:设dp[i][j]为消灭i到j只狼的代价,枚举k作为最后一只被杀死的狼,此时会受到a[k]和b[i-1] b[j+1]的伤害 取最小的即可 可列出转移方程:dp[i][原创 2016-09-27 21:08:14 · 319 阅读 · 0 评论 -
LeetCode72. 编辑距离
题意: 给定两个单词word1 和word2,计算出将word1转换成word2 所使用的最少操作数。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 思路: dp[i][j]:word1的前i个字母转换成word2的前j个的最少步骤 因此,转移方程: dp[i][j] = dp[i-1][j-1] word1[i] == word2...原创 2019-09-10 22:09:44 · 111 阅读 · 0 评论