dp
文章平均质量分 81
德鸭
时间并不会因为你的迷茫和迟疑而停留,就在你看这篇文章的同时,不知道有多少人在冥思苦想,在为算法废寝忘食,不知道有多少人在狂热地拍着代码,不知道又有多少提交一遍又一遍地刷新着OJ的status页面……
没有谁生来就是神牛,而千里之行,始于足下!
展开
-
状压dp POJ3254+POJ1185
位运算补充& 与 同为1为1 or 为0| 或 同0为0 or 为1^ 异或 不同为1 相同为0~ 取反 去相反的左移 右移 同理POJ 3254 题目链接:http://poj.org/problem?id=3254题目大意: 农夫有一块地,被划分为m行n列大小相等的格子,其中一些格子是可以放牧的(用1标记),农夫可以在这些原创 2017-05-24 23:01:20 · 168 阅读 · 0 评论 -
2017 暑假艾教集训 day3
题目:https://cn.vjudge.net/contest/176068#overviewUva 12260做法:Petra的策略满足贪心,所以先把糖果按P在按J排序,然后去取,就看Jan会取哪些糖果了。 每次默认Jan先取,如果petra先取的话,i从2开始循环。那么每个糖果就可以看成是Jan取不取,但是要注意,由于Petra是一定会往后一个取,所以Jan取原创 2017-08-03 23:57:53 · 202 阅读 · 0 评论 -
2017暑假集训 div1 DP(1)
HDU 1024题意:为给定一个数组,求其分成m个不相交子段和最大值的问题。做法:很容易想到转移方程 DP[i][j]=max(DP[i][j-1],dp[i-1][k])+a[j]; n2的状态,转移又有n ,所以一共n3。所以我们得想个办法优化一下。优化1:可不可以在进行转移时,已经把 max dp[i][k] 预处理出来呢。答案是可以的,实现的时候加上滚动的思想优化2:原创 2017-07-18 21:49:48 · 257 阅读 · 0 评论 -
2017暑假集训 div1 DP(2)
poj 3186题意:给一串数字,每次可以从最左端和最右端拿去一个数字,得到的价值是本身数字乘以拿去的次序做法:区间DP 每次枚举长度然后枚举起点,从左右两端开始转移即可DP[I][J]代表I是起点J 是终点的最大值。#include #include #include #include #include using namespace std;int n;原创 2017-07-20 16:43:23 · 203 阅读 · 0 评论 -
树的重心及其一些性质。poj3107 && poj 1655
定义树的重心:删去重心后,生成的多棵树尽可能平衡。即以这个点为根,那么所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。(所有子树的最大块的节点最小)性质性质 1 :树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个距离和,他们的距离和一样。性质 2 :把两棵树通过某一点相连得到一颗新的树,新的树的重心必然在连接原来两棵树重心的路径上。性原创 2017-05-20 22:30:55 · 384 阅读 · 0 评论 -
基础DP1 HDU1024+HDU 1074
HDU 1074链接:http://acm.hdu.edu.cn/showproblem.php?pid=1024题意:给定一个数组求其分成m个不相交的子段和最大问题;做法(这里是看kuangbin的做法的)设Num为给定数组,n为数组中的元素总数,Status[i][j]表示前i个数在选取第i个数的前提下分成j段的最大值,其中1Status[i][j]=Max原创 2017-05-30 21:22:03 · 233 阅读 · 0 评论 -
数位DP HDU3555+CF55D+HDU2089
数位DP:较为精细的讲解在上面的文章已经提到了,这里就直接说题了1hdu:2089 http://acm.hdu.edu.cn/showproblem.php?pid=2089题意:询问[L,R]之间有多少个数没有出现过4,且不存在62相连的情况!思路:基本的数位dp,记忆化搜索,其中dp[i]都表示的是从1到当前数的答案数,考虑每一位判断是否是4,同时记录下来前一位是否是6,如果原创 2017-05-30 20:39:56 · 238 阅读 · 0 评论 -
树形DP POJ3659 好难的一道题
链接:http://poj.org/problem?id=3659题意:给你n个点,给出n-1无向边表示这两个点相邻,问最小选几个点可以把整个区域覆盖(一个点被选会覆盖它相连的节点)思路:可以随机把一个点看做根节点成为一个树,然后做树上dp1我们定义:dp[i][0]:自己被选,且所有子节点被覆盖的最小值dp[i][1]:自己不被选,被父亲节点覆盖,且所有子节点被覆盖的最小值;原创 2017-05-17 11:49:56 · 251 阅读 · 0 评论 -
LIS 两种算法分析+hdu 1950
总结:最长递增子序列问题,Longest Increasing Subsequence 下面我们简记为 LIS。O(n2):经典动态规划 设a[t]表示序列中的第t个数,dp[t]表示从1到t这一段中以t结尾的最长上升子序列的长度,初始时设dp [t] = 0(t = 1, 2, ..., len(a))。则有动态规划方程:dp[t] = max{1, dp[j] + 1} (j =原创 2017-05-25 22:03:48 · 214 阅读 · 0 评论 -
hdu 3555 数位dp入门
题意:给定一个long long类型能够存下的数字n,统计1~n之间含有49的数字的个数;思路:初始版本:需要记录当前位置,前一位置放了那个数字,当前是否已经包含49,是否有上界这四个信息,也就是dfs的四个参数。dfs(pos,pre,istrue,limit);其实这种做法有点相当于把普通的数位dp的求dp过程和最后总计的过程合二为一了。[cpp] view pla转载 2017-05-25 19:15:56 · 280 阅读 · 0 评论 -
数位dp总结
数位dp总结 之 从入门到模板标签: 数位dp 2016-08-03 14:37 4666人阅读 评论(6)收藏举报本文章已收录于:分类: 总结(3) 作者同类文章X版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]基础篇实战篇第一m转载 2017-05-25 19:09:30 · 282 阅读 · 0 评论 -
斜率DP模板
斜率dp 线性裸题 3507#include<stdio.h>#define N 500010int dp[N];int q[N];int head,tail;int sum[N];int a[N];int n,m;int getDP(int i,int j){ return dp[j]+(sum[i]-sum[j])*(sum[i]-sum[j])+m;...原创 2018-10-03 15:54:57 · 244 阅读 · 0 评论