
动态规划
hanhansoul
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
poj1949 chores
/* * poj1949 AC 看起来像拓扑排序的DP * * 关键在于:工作k的前趋在1..k-1进行选择。 * 所以,理解题意可知,令工作i的结束时间为dp[i] * dp[i] = max(dp[j]|工作j为i的前趋)+t[i]; * * 但即使没有此条件,也可以将此题看作是一道树状DP。 * 将拓扑图反向,即将某工作的前趋作为该工作的儿子进行DP。 * 但我的树状DP原创 2012-07-15 18:11:28 · 917 阅读 · 0 评论 -
poj1180 Batch Scheduling
/* * poj1180 AC * 动态规划+斜率优化+单调队列 * 注意边界的处理,由于STL的问题导致浪费了很多时间。 * 状态方程巧妙,逆序的方式很有效。 * * 方程的变化十分巧妙。 * 之前的方程: * dp[i][j] 表示前i的工作分成j组的最小花费。 * f[i]表示前i个工作的费用系数和。 * t[i]表示前i个工作的时间总和。 * dp[i][j] = m原创 2012-08-02 10:25:00 · 710 阅读 · 0 评论 -
poj2378 Tree Cutting
/* * poj2378 AC * 一次水过。 * 简单的树状DP,先做一次dfs算出每个结点的子孙结点总数,包括自己,sum[i]。 * 再做dfs计算删去每个结点x是否满足条件,即满足: * 1) 每个结点的所有子结点i的sum[i]是否小于half。 * 2) 父结点方向上的结点总数,sum[1]-sum[x]是否小于half(1为树的根结点)。 * 若满足则为原创 2012-07-18 19:50:33 · 531 阅读 · 0 评论 -
poj2374 Fence Obstacle Course
/* * poj2374 AC * 线段树+DP 这道题还是很典型的,值得一做。 * * */ #include #include #define MAXN 200005 using namespace std; long tree[MAXN<<2]; long a[50005],b[50005]; long f[50000][2]; long query(long k,long原创 2012-07-18 17:02:18 · 639 阅读 · 0 评论 -
poj2342 Anniversary party
/* * poj2342 AC * 典型的树状DP。 * dp[i][0]表示员工i参加舞会的最大值,dp[i][1]表示员工i不参加舞会的最大值。 * * dp[i][0] = max(dfs(son[i],1)); * i参加则i的儿子结点一定不能参加。 * dp[i][1] = max(dfs(son[i],0),dfs(son[i],1)); * i不参加则i的儿子结点可参原创 2012-07-19 13:12:18 · 789 阅读 · 0 评论 -
poj2228 Naptime
/* * poj2228 AC * DP+滚动数组 * 方程开始就想错了,看了题解才知道差了十万八千里。 * 值得研究的一道题。 * * f[i][j][0..1]表示前i段时间,休息j段时间,且第i段时间 * 在不休息(0)或休息(1)时的最大值。 * * f[i][j][0] = max(f[i-1][j][1],f[i-1][j][0]); * f[i][j][1] =原创 2012-07-20 10:34:54 · 756 阅读 · 0 评论 -
poj1112 Team Them Up!
/* * poj1112 AC * DP 背包问题 与poj1636 prison rearrangement如出一辙。 * 问题挺经典,重点在于构造模型。 * 首先考虑将所有人分为互斥的若干部分,这便是背包问题中物品了。 * 之后,要将每个"物品"分为放在A和放在B的两个部分,然后进行DP。 * * I. 求补图,将表示两个人相互认识的边去除,连接所有互相不认识, * 或单原创 2012-09-17 20:11:51 · 557 阅读 · 0 评论