
动态规划
各种dp
Christine_xb
lnsyoier
展开
-
hdu2196 computer
思路:①我们设定Dp【u】表示以u为根的子树中,距离点u最远距离长度。那么有:Dp【u】=max(Dp【v】+W(u,v));②现在对于一个点u来讲,有两个方向,一个是子树方向,一个是非子树方向。我们搞定了子树方向,就剩下非子树方向了。那么设定F【u】表示非子树方向到点u节点最远的长度。对于一个点来说,如果是非子树方向就有两种递推状态的方案:1.从父亲节点来(从根节点到当前节点这条路...原创 2020-03-17 20:44:42 · 369 阅读 · 0 评论 -
Tyvj 清理垃圾
用f[i,j]表示:完成前i项任务,若Candy花了j分钟,那么飘飘乎居士最少花f[i,j]分钟;a[i]表示:Candy完成第i项任务所花的时间;b[i]表示:飘飘乎居士完成第i项任务所花的时间。则方程为:f[i,j]=Min{f[i-1,j]+b[i],f[i-1,j-a[i]]} 。当j<a[i]时特判。解释几个点:转移的第二层循环为什么从0扫起,是因为可能存在candy不...原创 2020-03-03 20:26:33 · 269 阅读 · 0 评论 -
poj1160 Post Office
dp[i][j]:前i个村庄建j个邮局的最小距离和dis[i][j]:第i个村庄到第j个村庄之间建1个邮局的最小距离和(预处理)状态转移方程:dp[i][j] = min(dp[i][j],dp[k][j - 1] + dis[k + 1][j])还有一点,计算dis[i][j]时,dis[i][j - 1]已经计算出来,而且可以推导出无论j - 1为奇数还是偶数,dis[i][j]均可以写...原创 2020-03-01 13:06:46 · 165 阅读 · 0 评论 -
poj1155 TELE
树形背包先解释一下题意:一个电视台转播比赛,电视网络类似于树,树的节点为中转站或者用户。输入:N M N表示转发站和用户总数,M为用户数以下N-M行,第i行第一个K,表示转发站i和K个(转发站或用户)相连, 其后第k对数val,cost表示,第i个转发站到val有边,费用cost。最后一行M个数表示每个用户愿意负的钱。输出:不亏本前提下,可以收到节目最多的用户数。(如果某个用户要收到节...原创 2020-03-01 11:17:14 · 169 阅读 · 0 评论 -
Vijo114 小胖守皇宫
F[X][0]表示结点X的父亲放了守卫的最小花费,F[X][1]表示结点X自身放了守卫的最小花费,F[X][2]表示结点X和父亲都不放守卫,X的其中一个儿子放了守卫的最小花费。这样,父亲放了守卫,X可以选择放守卫(F[X][1]),或者可以是儿子放或不放守卫(F[son][1],F[son][2])。自身放守卫,则儿子都是父亲放了守卫(F[son][0])。其中一个儿子放了守卫,则枚举哪个儿...原创 2020-02-28 12:14:45 · 189 阅读 · 0 评论 -
hdu2746 string painter
这代码是没a的,前面的部分应该和bzoj1260思路一样,但是不对,改不动了,哪天再改。#include<cstdio>#include<algorithm>#include<iostream>#define maxx 1000000007using namespace std;char a[107],b[107];int dp[107],f[10...原创 2020-02-27 11:49:01 · 113 阅读 · 0 评论 -
bzoj1864 三色二叉树
建树学一下!开个build递归建树,有点像二分!#include<cstdio>#include<algorithm>//#include<bits/stdc++.h>#include<cstring>#define maxn 10007using namespace std;char s[maxn];int ch[maxn][2],...原创 2020-02-26 12:58:22 · 135 阅读 · 0 评论 -
hdu1520(poj2342) Anniversary party
入门树形dp,f[i][0]表示不选择i的最大,f[i][1]表示选择i的最大vis记录是否选择 错了错了vis是记录是否遍历过的,in记录有没有上司#include<iostream>#include<cstdio>#include<algorithm>//#include<bits/stdc++.h>#include<cstri...原创 2020-02-26 11:17:44 · 164 阅读 · 1 评论 -
noip2008传纸条
普通dp讲下思路,四维的数组是同时动规两边的路径,四种走法(2*2),最后输出比较一下记录ans。#include<cstdio>#include<algorithm>#include<iostream>#define maxn 55using namespace std;int f[maxn][maxn][maxn][maxn],a[maxn][...原创 2020-02-25 13:22:40 · 102 阅读 · 0 评论 -
bzoj1260涂色paint
#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace std;int f[55][55];char s[55];int main(){ scanf("%s",s+1); int n=strlen(s+1); me...原创 2020-02-26 08:38:47 · 117 阅读 · 0 评论 -
lnsyoj137乘积最大
区间dp,f[i][j]表示方用了i个乘号到第j位数字最大的乘积,最后输出f[k][n-1]#include<iostream>#include<string>using namespace std;string s;long long man,f[41][41]={{0}},n,k;long long cs(int ks,int js)//计算一段的值{ ...原创 2020-02-26 08:38:57 · 207 阅读 · 0 评论 -
poj2955 brackets
基础区间dp#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dp[107][107];char s[107];int main(){ while(scanf("%s",s)!=EOF&a...原创 2020-02-22 12:12:51 · 115 阅读 · 0 评论 -
区间dp学习笔记
区间dp相关整理定义:区间动态规划问题一般都是考虑,对于每段区间,他们的最优值都是由几段更小区间的最优值得到,是分治思想的一种应用,将一个区间问题不断划分为更小的区间直至一个元素组成的区间,枚举他们的组合 ,求合并后的最优值。设F[i,j](1<=i<=j<=n)表示区间[i,j]内的数字相加的最小代价最小区间F[i,i]=0(一个数字无法合并,所以代价为0)。每次用变量...原创 2020-02-22 11:06:59 · 178 阅读 · 0 评论 -
p1880石子合并——区间dp
环状2*n 区间dp输出最大值和最小值,f[i][i+n-1]#include<cstdio>#include<algorithm>#include<iostream>using namespace std;int n,w[205],f1[205][205],f2[205][205],sum[205];int main(){ scanf(...原创 2020-02-26 08:39:24 · 138 阅读 · 0 评论 -
最长公共子序列——动态规划
动态规划思想,O(n2)算法。这个是求最长公共上升子序列的基础。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int f[1007][1007];int a[1007],b[1007];int mai...原创 2020-02-09 09:28:55 · 107 阅读 · 0 评论 -
最长上升子序列
动态规划算法#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int f[1007];int a[1007];int main(){ int n; cin>>n; for(int i=1;i<=n;i++...原创 2020-02-09 10:15:21 · 76 阅读 · 0 评论 -
最长公共上升子序列——动态规划
最长公共上升子序列(LCIS)的O(n^2)算法预备知识:动态规划的基本思想,LCS,LIS。问题:字符串a,字符串b,求a和b的LCIS(最长公共上升子序列)。首先我们可以看到,这个问题具有相当多的重叠子问题。于是我们想到用DP做。DP的首要任务是什么?定义状态。定义状态F[i][j]表示以a串的前i个字符b串的前j个字符且以b[j]为结尾构成的LCIS的长度我们来考察一下这个这个状态...原创 2020-02-09 11:20:49 · 401 阅读 · 0 评论 -
p1353【USACO08JAN】跑步running
第一种dp方法先讲一下状态转移方程f[i][j]就是第is时奶牛的疲劳度是j,那么我们就可以就ta这1s是否休息进行讨论。如果休息的话,就要一休息到底,所以把疲劳度恢复成0所用的时间是i+j,恢复时走的距离是不变的,所以恢复完体力后所走的距离就是恢复体力前所走的距离。那么状态转移方程1就出来啦: f[i+j][0]=max(f[i+j][0],f[i-1][j+1]);...原创 2020-02-09 12:25:22 · 255 阅读 · 0 评论 -
lnsyoj91【USACO07FEB】cow sorting牛排序
置换环理论以本题为例子原序列:2 3 4 1 6 5排序后:1 2 3 4 5 6这个序列可以找到两个单独的置换环{ {1, 2, 3, 4} {5, 6} },就是几个数通过几次交换到达排好序正确的位置不需要与其他数交换。显然这样是最优的,可以发现,若一个置换环中有n个元素,则可以通过n-1次交换使得这n个元素归位。那么总的交换次数就是置换环的数量-1。结论是:最少交换次数就是总元...原创 2020-02-11 10:37:10 · 265 阅读 · 0 评论