题意:基环树最大独立集
思路:
像这种题就是朴素的树形dp非常容易的,我们用一些技巧转化为变体树。
直接套用仙人掌的动态规划做法:(基环树事实上也属于一种仙人掌)
首先利用tarjan算法,如果遇到自己与儿子之间的边为割边则按照树边处理。
Tarjan后看一下与自己相连的边,如果某个相邻点不是自己的儿子,并且入栈序比自己大,那么说明自己是环上的的最高点,此时我们对环上特别的进行d...
分类:
其他好文 时间:
2014-10-17 11:57:30
阅读次数:
371
切割钢条【动态规划】
首先将钢条切割为长度为i和n - i两段,接着求解这两段的最优切割收益Ri和Rn - i
(每种方案的最优收益为两段的最优收益之和),由于无法预知哪种方案会获得最优收益,
我们必须考察所有可能的i,选取其中收益最大者。如果直接出售原钢条会获得最大收益,我
们当然可以选择不做任何切割。
钢条切割问题还存在一种相似的但更为简单的地柜求解方法:
我们将钢条从左边切割下长度为i的一段,只对右边剩下长度为n-i的一段惊醒切割。(递归
求解),对左边的一段则不再切割。即问题的分解方式为:将长度为n...
分类:
其他好文 时间:
2014-10-16 23:13:13
阅读次数:
305
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1421
题目大意:给出n个物品,要你选出k对物品,使得每对物品之差的平方之和最小。
思路;动态规划求解,首先将物品按重量升序排序,根据贪心思想,每对物品必然是相邻的两个物品,这样重量差的平方才能保证最小。然后DP,用f[i][j]表示前i个物品,选j对的最少代价,这里需要进行一个重要的分类讨论:...
分类:
其他好文 时间:
2014-10-16 23:10:13
阅读次数:
179
题目大意:给定一个无向图,运输n天,其中有些天有些点不能走,更换路线代价为k,求代价总和
首先令cost[i][j]为第i天到第j天都走同一路线的最小花销 这个用SPFA处理
然后就是动规的问题了 令f[i]为1~i天的最小花销
则f[i]=min{ f[j]+cost[j+1][i]+k } ( 0
注意m和n别写反
乘天数之前要特判是不是正无穷
#include
#include
...
分类:
其他好文 时间:
2014-10-16 19:38:53
阅读次数:
223
题目大意:不太好描述,自己看吧。。
思路:首先从最上面的点开始考虑,因为球一定是从最上面开始往下掉,所以球经过最上面的点的概率是1,然后他会有1/2的几率向左,1/2的几率向右,也就是下面的两个点均分上面点的几率。当然这是所有的点都存在的情况。如果有哪里的点不存在了,那么求落到这个点的几率不变,然后它的所有几率都会加在在它下面两行且在正下方的点。
按照这样写dp方程,显然是不难的。之后...
分类:
其他好文 时间:
2014-10-16 17:17:52
阅读次数:
215
定义:
线性DP问题的子状态与父状态之间往往相差一个元素,所以子状态通过添加一个增量而转换到父状态。从最小的子问题到原问题,一层一层的状态转移呈现出线性递增的关系,所以称为线性DP。
经典的线性DP问题有最大字段和、最长公共子序列、最长回文子序列、最长不下降(下降)子序列等等。。。
大部分的线性DP都是1维的。
陆续更新线性DP的题。...
分类:
其他好文 时间:
2014-10-16 16:01:22
阅读次数:
198
题目大意:给定一个钉子阵,小球从最上方的钉子释放,求到达最底端某个位置的概率
只需要DP就好了 f[i][j]表示小球落在第i行第j个钉子上的概率
如果一个点有钉子 f[i+1][j]和f[i+1][j+1]平分这个点的概率
如果一个点没有钉子 f[i+2][j+1]得到这个点的全部概率
最后输出f[n+1][m+1]即可 注意不能输出回车 否则PE
无视这凶残的结构体操作符重载吧0.0...
分类:
其他好文 时间:
2014-10-16 14:52:22
阅读次数:
236
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546题意:见题目刚开始怎么写都写不对,后来吃饭的时候想了想记忆化搜索的办法就是说设dp(now,rev)为我现在要选择now这个物品,此时我手里剩下了rev这么多的钱。那么如果我手里剩下的钱不少于5块钱...
分类:
其他好文 时间:
2014-10-16 14:24:12
阅读次数:
182
http://acm.nyist.net/JudgeOnline/problem.php?pid=15
dp[i][j]表示从i到j至少需要添加多少个括号才能满足匹配条件.
初始化:
if(i == j)
dp[i][j] = 1;
else
dp[i][j] = INF;
状态转移:
当i
if(match(str[i], str[j])) dp[i]...
分类:
其他好文 时间:
2014-10-15 18:44:31
阅读次数:
259
题目:给你一个集合{1,2,..,n},计算子集的个数,子集的元素不能相邻且不能再插入元素。
分析:dp,动态规划。相邻元素间只能相差3或者2。
动态方程:f(k)= f(k-2)+ f(k-3);{ f(k)为以k为结束元素的集合个数 };
f(n)+ f(n-1)即为结果。
说明:Fib类似物。
#include
#i...
分类:
其他好文 时间:
2014-10-15 02:23:29
阅读次数:
265