![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
天使v之翼
Keep on fighting!
展开
-
区间DP的主要思路
区间动态规划原创 2015-07-31 16:08:02 · 5181 阅读 · 0 评论 -
POJ 3140 Contestants Division 简单树形DP
注意到题目说每两个点之间有且仅有一条路径,由此可得是一棵树。那么接下来就简单了,直接dfs即可。#include#include#include#include#includeusing namespace std;#define LL long long#define INF 0x3f3f3f3f3f3f3f3fconst int maxn=1e5+10;vecto原创 2016-11-02 15:53:30 · 467 阅读 · 0 评论 -
CF 219D Choosing Capital for Treeland 树形DP
首先我们可以将有向图转化为无向图,即正向边权值为0,反向边权值为1。那么接下来求某个点到剩下所有点的距离最小值。首先我们可以选择一个点为根,求出其到剩下所有点的距离。那么接下来选择其它点为跟的情况可以由上面计算的值递推出来。假设root有son1和son2, root到其他所有点, 都是先到son1, son2, 再接着往下走.那么求son1到所有点的时候, son1到son1子树的计数情况和原创 2016-11-02 14:31:09 · 402 阅读 · 0 评论 -
HDU 2196 Computer
树形DP第二题。题目要求出每个节点能够到达的最大距离。考虑最大距离只有两种情况。第一,通过子树达到最大;第二,通过父亲节点达到最大。而第二种通过父亲节点达到最大可能就经过了此节点,那么我们就还得记录一个从其它儿子节点过来的次短距离。#include#include#include#include#includeusing namespace std;const int maxn=1原创 2016-10-26 17:06:23 · 319 阅读 · 0 评论 -
HDU 1520 Anniversary party
树形DP第一题。首先定义dp[i][0]表示不选i号节点i子树能获取的最大值,dp[i][1]表示选i号节点i子树能获取的最大值。那么很容易的可以写出状态转移方程:dp[i][0]+=max(dp[v][0],dp[v][1]);dp[i][1]+=dp[v][0];#include#include#include#include#includeusing names原创 2016-10-26 16:51:08 · 321 阅读 · 0 评论 -
Code Force 229 D (DP)
Code Forces 229 D原创 2015-08-06 11:29:46 · 844 阅读 · 0 评论 -
ZOJ 3551 Bloodsucker(概率DP)
ZOJ 3551 Bloodsucker原创 2015-08-04 11:58:51 · 807 阅读 · 0 评论 -
POJ 2096 Collecting Bugs(概率DP)
POJ 2096 Collecting Bugs(概率DP)原创 2015-08-04 12:53:45 · 432 阅读 · 0 评论 -
Codeforces 148 D Bag of mice(概率DP)
思路:用dp[i][j]表示有i只白鼠,j只黑鼠;那么可以分为三种情况。1.公主第一次就抓到白鼠,dp[i][j]+=i/(i+j); 2.公主抓黑鼠,龙王抓黑鼠,一只黑鼠跳出来,dp[i][j]+=(((j/(i+j))*((j-1)/(i+j-1))*((j-2)/(i+j-2)))*dp[i][j-3],当然还得满足j>=3; 3.公主抓黑鼠,龙王抓黑鼠,一只白鼠跳出来,dp[i][j]=(原创 2015-08-04 12:03:19 · 768 阅读 · 0 评论 -
POJ 1651(区间DP)
POJ 1651 区间DP原创 2015-08-03 11:29:42 · 911 阅读 · 0 评论 -
HDU 3466 Proud Merchants(01背包的应用)
01背包原创 2015-08-13 14:20:06 · 776 阅读 · 0 评论 -
UVA 10003 Cutting Sticks 区间DP
#include#include#include#includeusing namespace std;const int maxn=52;const int INF=99999999;int num[maxn];int dp[maxn][maxn];int main(){ int l,n,i,j,k,p,tmp,MIN; while(cin>>l&&l)原创 2015-07-31 16:18:29 · 351 阅读 · 0 评论 -
HDU 2089 不要62 数位DP
题意:给出一个区间,求区间内满足不包含4和不含连续的62的数的个数。dp[pos][state]表示当前第pos位,前一位是否是6的状态,这里state只需0和1两种状态就可以了,不是6的情况可视为同种,不会影响计数。#include#include#includeusing namespace std;int a[20];int dp[20][2];int df原创 2017-05-03 17:32:56 · 809 阅读 · 0 评论