动态规划训练(3)题解
2015-11-27 19:42
363 查看
题目链接
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=100641#overview
A 题意很恶心,好久没读那么长的英语了,其实方法很简单,将数从大到小排序,然后动态规划分组O(n^3)的算法复杂度
B n的范围很小,很明显是状态压缩DP,注意是要讲状态转移写对,还有由于是计数问题要开long long
C和训练(1)里面的约瑟夫问题相似,注意是输出的个数可能小于3
D读懂题意就行,
F(i,j) = max(F(i - 1, j) + w1, F(i, j - 1) + w2)
根据题意就能明白w1,w2代表着什么意思
E在前两次的训练中经常出现的问题,注意用string保存状态,状态转移的答案不再是一个数,而是一个结构体
F题不会做,不是动态规划
G二分图最大匹配做的,动态规划的思想我觉得有问题,但是好像也能过
f[u][0]: 表示不选i点,覆盖这个子树的最少点
f[u][1]:选i点,覆盖这个子树的最少点
所以可以得到状态转移方程:
f[u][1] = sum{ min{f[v][0], f[v][1]}, v是u的子结点 }
f[u][0] = sum{ f[v][1], v是u的子结点 }
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=100641#overview
A 题意很恶心,好久没读那么长的英语了,其实方法很简单,将数从大到小排序,然后动态规划分组O(n^3)的算法复杂度
B n的范围很小,很明显是状态压缩DP,注意是要讲状态转移写对,还有由于是计数问题要开long long
C和训练(1)里面的约瑟夫问题相似,注意是输出的个数可能小于3
D读懂题意就行,
F(i,j) = max(F(i - 1, j) + w1, F(i, j - 1) + w2)
根据题意就能明白w1,w2代表着什么意思
E在前两次的训练中经常出现的问题,注意用string保存状态,状态转移的答案不再是一个数,而是一个结构体
F题不会做,不是动态规划
G二分图最大匹配做的,动态规划的思想我觉得有问题,但是好像也能过
f[u][0]: 表示不选i点,覆盖这个子树的最少点
f[u][1]:选i点,覆盖这个子树的最少点
所以可以得到状态转移方程:
f[u][1] = sum{ min{f[v][0], f[v][1]}, v是u的子结点 }
f[u][0] = sum{ f[v][1], v是u的子结点 }
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#使用DeflateStream解压缩数据文件的方法
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- C#调用WinRar执行rar、zip压缩的方法
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- C++动态规划之最长公子序列实例
- C++动态规划之背包问题解决方法
- 基于C++实现的各种内部排序算法汇总