自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

博客已迁移至:lzed.github.io

leetcode代码的github仓库地址:https://github.com/lzed/leetcode

  • 博客(29)
  • 问答 (1)
  • 收藏
  • 关注

原创 Codeforces379F-New Year Tree(LCA)

题目链接http://codeforces.com/problemset/problem/379/F思路每次维护当前的直径d和直径的两个端点u,v。当新加入两个点x和y时,选择x或者y相同,因此只考虑x: 当x到u的距离大于原来的直径时,将v更新为x,并更新直径 当x到v的距离大于原来的直径时,将u更新为x,并更新直径 每次使用LCA在线维护直径代码#include <iostream>#i

2016-09-30 22:16:23 284

原创 Codeforces711C-Coloring Trees(dp)

题目链接http://codeforces.com/contest/711/problem/C思路dp,状态还是比较好表示 **状态表示**d[i][j][k],前i个树都已经染色, 第i棵树颜色为j,目前还能用的颜色数为k 转移方程: 如果和前一个颜色相同:d[i][j][k] = min(d[i][j][k], d[i - 1][l][k] + p[i][j]); 如果和前一个颜色不同:

2016-09-23 20:56:52 208

原创 Codeforces711D-Directed Roads(强连通分量+乘法原理)

题目链接http://codeforces.com/contest/711/problem/D思路这道题的输入很神奇,由输入可以得出一个结论就是每个点最多只会有一条出边,因此每个点最多在一个环中。 然后对于一个环比如1 -> 2 -> 3 -> 1,其方案数是23−2 2^3 - 2,然后可以发现,对每一个独立的环,若有x个点,那么方案数就是2x−22^x - 2 对所有环,由输入得到的性质,因

2016-09-23 20:46:25 292

原创 Codeforces715B-Complete The Graph(最短路)

题目链接http://codeforces.com/problemset/problem/715/B思路先将所有边长为0的边看做断路,从T做一次最短路,得到g[],代表从T到所有点的最短路从S开始做最短路,结果保存在d[]中,当遇到边长为0的边,设置其长度为L - g[v] - d[u],小于1的话设置为1代码#include <iostream>#include <cstring>#in

2016-09-21 10:51:03 598

原创 Codeforces713C-Sonya and Problem Wihtout a Legend(dp + 离散化)

题目链接http://codeforces.com/problemset/problem/713/C思路a[i]非常大但是n很小,可以考虑离散化,将一维考虑成下标,那么可以先将数组排序成b[i] 有一个题目是求非严格的单调递增序列需要的代价: 状态表示:d[i][j], 第i个数为b[]中的第j个数需要的最小代价 转移方程:d[i][j] = min(d[i][j], d[i - 1][k]

2016-09-19 20:14:00 401

原创 HDU5875-Function(RMQ + 二分)

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5875思路对于一个数a % b,只有当b ≤ a的时候,a才会变化 因此对于每个询问[L, R],只需要找到第一个≤a[L]的即可,先用ST表预处理出区间[L, R]的最小值,然后二分查询区间内满足条件的值代码#include <iostream>#include <cstring>#include

2016-09-19 16:37:21 208

原创 HDU5894-hannnnah_j’s Biological Test(组合数学+Lucas定理)

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5894思路首先去掉这m个人,还剩下n - m,相当于把n - m拆分成m个不小于k的数,我们可以考虑将每个数减去k - 1, 这样就转化成了将n - mk拆分成m个正数,即C(n - mk - 1, m - 1),因为是圆桌,因此乘以n,又因为每种方案实际上计算了m次,因此再除以m即可 1. 最终答案:n

2016-09-19 13:53:58 819

原创 HDU5900-QSC and Master(区间dp)

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5900思路区间dp,这道题有个坑点就是比如3 4 8 9,比如4,8选掉了,3和9就变成了相邻的 状态表示:d[i][j] = 区间[i, j]能获得的最大值 转移: 1. d[i][j] = max(d[i][j], d[i][k] + d[k + 1][j]) 2. 若a[i]和a[j]不互质,

2016-09-18 18:49:43 416

原创 codeforces #371(Div2)题解

A. Meeting of Old Friends求两个区间的重叠部分的大小,先把两个点排一下序好处理一点,然后判断两个区间的位置就好了 #include <iostream>#include <cstring>#include <stack>#include <vector>#include <set>#include <map>#include <cmath>#include <

2016-09-14 20:03:34 587

原创 Codeforces #370(div2)题解

A. Memory and Crow列个公式推一下就可以了#include <iostream>#include <cstring>#include <stack>#include <vector>#include <set>#include <map>#include <cmath>#include <queue>#include <sstream>#include <ioman

2016-09-14 12:37:42 390

原创 HDU1087-Super Jumping! Jumping! Jumping!(dp)

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1087思路就最大上升子序列 状态表示d[i]:以元素i为最后一个元素的最大上升子序列转移方程d[i] = max{d[j] + a[i], a[i] | j < i && a[j] < a[i]}代码#include <iostream>#include <cstring>#include <stac

2016-09-12 16:01:41 153

原创 HDU1506-Largest Rectangle in a Histogram(dp)

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1506思路就只需要找到当前每一个矩形,以它的高度,向左向右分别能延伸多长即可 直接暴力肯定会T,其实每次能延伸的都和上一次有关系,因此考虑dp 状态表示l[i]:以当前矩形的高度向左能延伸多少转移 如果h[i] ≥ h[i - 1],那么l[i] = l[i - 1] + 1,但是在i - 1 - l

2016-09-12 15:42:14 235

原创 HDU1231-最大连续子序列(线性dp)

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1231思路最近在刷dp的水题= = 最长连续和的裸题 状态表示d[i]:以第i个元素为最后的一个元素的最大连续和转移方程d[i] = max(d[i - 1] + a[i], a[i])代码#include <iostream>#include <cstring>#include <stack>#i

2016-09-11 21:08:02 179

原创 HDU2955-Robberies(0-1背包)

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2955思路简单的01背包,但是要想清楚状态。 最先考虑的状态是选到第i个物品,被抓的概率是j的时候的最大价值,但是被抓的概率是float,肯定会产生误差 因此将状态表示为选到第i个物品,已经抢到的钱是j的时候,不被抓的最大概率为d[i][j] 状态表示d[i][j]:选到第i个物品,已经抢到的钱为j的

2016-09-11 20:47:07 209

原创 UVALive3181-Fixing the Great Wall(区间dp)

题目链接https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1182思路可以发现这样一个性质:假设A点离起点比B点更远,如果先访问A再访问B一定不会比先访问B再访问A更优,即区间dp。 因此将起点加入到点中,并且按照距离排序。每次做出的选择就是左

2016-09-10 21:35:52 390

原创 HDU1166-敌兵布阵

题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=1166思路最基本的线段树,单点修改,区间查询代码#include <iostream>#include <cstring>#include <stack>#include <vector>#include <set>#include <map>#include <queue>#in

2016-09-08 18:56:03 134

原创 UVALive3637-The Bookcase(dp)

题目链接https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1638思路最近在刷白书上的dp题感觉都好难啊,都是看了题解才会写= = 先将所有书按高度从高到低排序 状态表示:d[i][j],省略第一维k,在放第k本书时,第2层和第3层的宽度分别

2016-09-08 17:09:17 210

原创 UVALive4987-Evacuation Plan(dp + 贪心)

题目链接https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2988思路这道题的关键就是贪心,将队伍坐标和避难所坐标都从小到大排序,然后再进行dp。从小到大进行排序基于:若a < b且c < d,则|a - c| + |b - d| < |a -

2016-09-07 13:13:20 199

原创 UVALive4394-String painter(dp)

题目链接http://acm.hust.edu.cn/vjudge/problem/19916思路直接将A串刷成B串比较困难,考虑从另一个状态开始转移,比如先将空串刷成B串。 空串刷成B串就是比较简单的区间dp了 定义状态:d[i][j]将空串刷成区间[i, j]的状态所需要的最少操作次数 转移方程:首先当B[i] == B[j]时,d[i][j] = d[i][j - 1](显然将空串刷成a

2016-09-06 13:23:50 247

原创 UVALive4015-Cave(树形dp)

题目链接http://acm.hust.edu.cn/vjudge/problem/32271思路树形dp,树形dp一般要用一维来表示当前节点/父节点的访问状态 状态表示: d[u][i][s] 当前在第i个节点,访问了i个节点,并且是否回到当前节点(s == 0 or 1)所走过的最少距离 分析:分为回到当前节点或不会回到当前节点,设u为当前节点,v为u的一个儿子节点 1. 回到当前节点,s

2016-09-05 20:06:03 185

原创 UVALive2038-Strategic game(树形dp or 二分图匹配)

题目链接http://acm.hust.edu.cn/vjudge/problem/35474题意给定一棵树,要求选择最少的点,对于任意一个没有被选中的点,那么和它相邻的点钟一定有点被选到思路1. 树形dp: 状态 && 转移方程 对于任意一个点,其状态只有选和不选两种,并且其选择受父节点是否被选择影响,因此定义状态: d[i][s] 对于结点i,其父节点的选择状态为s(s == 0 / 1),

2016-09-04 17:33:47 240

原创 UVA11795-Mega Man's Mission(状压dp)

题目链接http://acm.hust.edu.cn/vjudge/problem/31961思路题目中n最大到16,因此考虑状压dp 定义状态d[i][s]:当前已经消灭了i个机器人,并且消灭过的机器人的状态为s的总方案数 转移方程:d[i][s] = sum(d[i - 1][ps]); 其中s和ps只有一位不同,并且s中1的个数比ps中1的个数多1 边界:d[0][0] = 0 目标:

2016-09-03 16:36:58 232

原创 UVA4731-Cellular Network(概率dp)

题目链接http://acm.hust.edu.cn/vjudge/problem/17270思路要使数学期望最小,明显可以看出来概率越大的应该先选,因此先将所有c[i]按照概率从大到小排序后进行dp 定义状态d[i][x]:目前选到第i组,当前选择的元素的是第x个的数学期望 转移方程:代码#include <iostream>#include <cstring>#include <stac

2016-09-03 14:11:30 206

原创 POJ2449-Remmarguts' Date(K短路)

题目链接http://poj.org/problem?id=2449题意求一个有向图的给定起点和终点的K短路思路A* + SPFA A*算法的核心是估价函数f(n) = g(n) + h(n)的设计。 对于该题,设g(n)为当前点到起点的最近距离,h(n)为当前点到终点的最近距离,f(n) = h(n) + g(n)的第k大即为起点到终点的第K短路。 该题为有向图,于是先将所有边反向,从终点做

2016-09-02 21:29:27 255

原创 UVA10534-Wavio Sequence(LIS)

题目链接http://acm.hust.edu.cn/vjudge/problem/19219思路只需正向和逆向分别做一次LIS,然后ans = 2 * min(d1[i], d2[i]) - 1代码#include <iostream>#include <cstring>#include <stack>#include <vector>#include <set>#include <ma

2016-09-02 15:33:24 218

原创 最长上升子序列LIS(dp)

分析最长上升子序列:对于一个序列A[],找出一个子序列x[], 使xi < xj(i < j),xi 和xj不一定连续,求最长的一个子序列 O(n^2)做法: 定义状态:d[i]为当前元素作为最后一个元素的LIS长度 转移方程:d[i] = max{d[j] + 1 | i > j && a[i] > a[j]}; 目标:max(d[i]) 状态:O(n), 转移O(n),时

2016-09-02 15:21:33 305

原创 UVALive4256-Salesman(dp)

题目链接http://acm.hust.edu.cn/vjudge/problem/21665思路状态:d[i][x]对第i个数,并且该数为x,修改的最少次数 转移方程:d[i][x] = min{d[i - 1][y] + (x == a[i] ? 0 : 1) | x == y || G[x][y]};代码#include <iostream>#include <cstring>#incl

2016-09-02 14:45:04 252

原创 UVA11584-Partitioning by Palindromes(dp)

题目链接http://acm.hust.edu.cn/vjudge/problem/34398题意给定一个字符串,将其划分为若干个串,并且每个串都要是回文串,要求划分出来的回文串数目最小思路转移方程 d[i] = min(d[j] + 1) 其中s[j + 1] ~ s[i]要是回文串 其中状态O(n),转移O(n) 时间复杂度为O(n)。但是每次要判断s[j + 1] ~ s[i]是否为回文串,

2016-09-01 20:33:22 206

原创 UVA11134-Fabled Rooks(贪心)

题目链接http://acm.hust.edu.cn/vjudge/problem/34086题意给定一个n x n的棋盘,在棋盘上摆放n个皇后,使其不相互攻击,并且对于每个皇后,给定一个矩阵区域,该皇后只能在这个矩形区域内,输出一个合法方案/impossible思路对于每个皇后,其摆放的x,y坐标是独立的,于是就将题意转化成了两个一维的问题:对于一个皇后,给定区间[l, r],只能在该区间上选择一

2016-09-01 13:43:06 201

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除