自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 CODEVS 4560 子串

这也许是我发的最后一篇博文了,,,就来说一下上一次考试里纠结了我2个小时最后零分的子串吧。 题目描述:在a串里找出k份使得按原顺序连接起来成为b串,求方案数。 这是一个比较难的dp问题,我觉得像是最长公共子序列的加强版,首先可以想到用两维表示a串和b串分别匹配到的位置,再用一维表示k份,之后在想状态的时候发现这样并不能进行状态的转移,因为无法进行份数的分配,直接进行状态转移会有重合,所以要再加一

2016-11-16 09:03:15 299

原创 最后复习之扩展欧几里得

例如ax+by=c这样的式子 1、当a,b互质的时候 可以用逆元做,因为a,b互质的时候c必然是1不然就没有解(c必须是gcd(a,b)的倍数),求逆元的话如果b是质数那么就可以用费马小定理(a的b-1次方%b与1同余)做,此时逆元就是a的b-2次方,可以用快速幂求解。附上快速幂的代码。#include<cstdio>#include<iostream>using namespace std

2016-11-16 07:06:57 248

原创 最后复习之强连通分量

不知道noip考不考这个,但是既然复习到了为了退役之后不忘还是写一下吧。关于这个强连通分量我只知道一个tarjan算法。 基本过程:dfs一个图把搜到的点进栈,对每个点进行标两个序号,一个表示深搜的顺序,另一个表示这个点所能直接或间接连到的被搜索到的最早的点,要一直维护第二个值,在回溯的时候(子树处理完后)如果这个点的两序号相等,则这个点就是这个强连通分量最早被搜到的点,那么这个时候进行出栈操作,

2016-11-14 07:55:04 304

原创 最后复习之最近公共祖先

据我所知最有两种算法:倍增、tarjan 一、倍增: 倍增这个思想适用性很强,有很多变形,树上倍增可以求lca,链上倍增(就是st算法)可以求解rmq问题。 基本过程:预处理每个点的深度和每个点2的i次方(2的i次方小于这个点的深度)的祖先是谁,然后对于每次询问,将这两个点先跳到同样深度,然后一齐向上跳,只要可以跳就提高速度,不然就降低速度,直到成为最近公共祖先节点的儿子后(就是速度小于0的时

2016-11-13 09:22:18 313

原创 最后复习之最短路

有这么几种最短路算法:floyd、dijkstra、bellman-ford、spfa 一、floyd: 基本过程:枚举中间点,然后枚举起点和终点,用中间点去更新起点到终点的距离。 证明:用每个点去更新所有它能更新的点,是不是就是最短路了?(然而并不会证明)。 多源最短路、求最小环、判断负环、适合稠密图 求最小环:在求最大标号为n的最小环时,预习求出1-n-1的最短路,然后找出两个点i,j

2016-11-12 19:38:10 295

原创 最后复习之最小生成树

就我所知的求最小生成树的方法有两种,prim算法和kruskal算法。各有优缺点,下面我来详细的介绍一下这两种算法。 一、prim算法: 基本过程:刚开始把1放入目前找到的最小生成树,然后不断地寻找离已知的最小生成树最近的点,将其放入最小生成树并对这棵树进行更新。 根据这个找点的过程可知prim适合稠密图。 证明:首先每个点和最小生成树的连边都是这个点到其他每个点的连边里边权尽可能小的边,因

2016-11-12 14:55:27 764

原创 CODEVS 2800 送外卖

题目描述:从0号点出发,经过1-n点,不要求顺序,而且每个点可以走多次,最后回到0点,求最短时间。 因为要走遍1-n点,那么直接最短路是不行的,不保证没有环,所以dfs时间会多一些,而且这里dfs不好剪枝,那么就可以考虑一下dp,状态就是到某个点,走过了一些点,所用的最短时间,那么就要记录走过了哪些点,用bool数组存并不好,因为dp数组要开二维,而且判断哪些点走过时还要去枚举每个点去判断,既费时

2016-11-12 10:16:08 594

原创 CODEVS 1958 刺激

回想起来这道题还是当初牛犇犇教我们深搜的时候让我们做的题,现在来看,深搜来做这个题还是比较简单的,在dfs的时候注意一下方向的转移就行了,现在我要用dp来做这个题。 棋盘型dp,想一下状态,一个位置,有两个状态:向下走来的(海拔),向上走来的。那么我们就可以开一个三维数组,记录每个状态的最长路径的长度。那每个状态的来源为上方(坐标)向下走(海拔),上方向上走,左方向上走,左方向下走。另外这些状态能

2016-11-11 23:13:10 240

原创 NOI题库 8211 派

题意:有n个派,体积不相等口味不同,有m个人要吃相同体积的派,派可以切,但是没人愿意吃不同味道的派,问每个人吃的最大体积是多少。 因为每个人都不会吃不同味道的派,所以这个题的答案不会超过所有派里体积的最大值,并且我们可以很容易地求出当每个人吃的体积为x时,这些派最多可以供多少人吃,那么我们就可以用二分答案来做这个题。 我觉得二分答案关键就在于两个地方:答案在序列里的位置特征,如何验证。对于这个题

2016-11-11 15:28:43 907

原创 CODEVS 2853 方格游戏

今天早上去做传说中的棋盘dp三兄弟:方格取数,传纸条,方格游戏。前两个虽说属于不同年份的noip提高组,结果除了读入优化其余全部一样,第三题意变化不大,但数据范围变成了n<=100,再和前两个一样任性地开四维并且用四重for循环就不行了,我们需要优化一下。 我认为dp相对于搜索要快在于它记录了搜索的一些值,不再需要重复求解,而dp相对于记忆化搜索要快在于dp比它多了高效的顺序,从子结构到总结构,保

2016-11-09 14:35:40 513

原创 CODEVS 1380 没有上司的舞会

题意:在一棵树上每个点都有价值,在这些点里找出一些互不相连的点并使其价值之和最大。 标签是树形dp,于是我第一次就尝试着用dp做,然而在读入的时候这个题挖了个坑,读入a,b,b是a的上司,然而我二话没说就把a当做了b的上司,结果就做不出来了。然后第二次我就“think diffierent”,用了一种贪心+bfs的做法,一扫题解里树形dp的乌烟瘴气,而且速度也不慢,虽然这时候我在读入的坑里,但这个

2016-11-08 19:39:50 513

原创 思维僵化

今天我去做了一个青铜的题,读入一个数输出其的相反数,只是这个题还让按其原精度输出,cout和printf都会自动截取一部分,所以我打算去确定一下它的精度再输出,至于怎么确定精度,我最初的打算是不断乘10,看其最后一位是不是0,但是这个想法是错的,因为我们不知道它的小数点后有多少个0,然后我就不知道怎么做了。这个时候橙汁出来说了一句:用字符串不就行啦。顿时我就发现我的思维已经僵化到这个地步了。写这篇博

2016-11-08 08:36:52 456

原创 CODEVS 3012 线段覆盖 4

题意:每个线段有左端点,右端点和积分,找出互不覆盖的线段的积分和的最大值。 和线段覆盖2唯一的区别就在于数据范围变大了,至于它的空间限制缩小对用dp做这个题并没有什么影响。 先说下线段覆盖2的做法:按左右端点排序都可以(线段覆盖4需要按右端点排序,这里按右端点从小到大排序来讲),第一层循环从左到右枚举每个点,第二层循环去枚举右端点比它小的点,找出右端点小于等于它的左端点且dp值最大的点,用它来求

2016-11-07 17:41:34 509

原创 CDOEVS 2980 买帽子

这个题和我在初赛时做的一个题比较像,那是个读程序写结果的题,然后我就提取了它的思想做了一下。还是dp,用二维数组f[i][j]表示字符串起点为i,终点为j​的系数,当字符串st[i-1]和st[j-1](字符串起点为0)相等时f[i][j]=f[i+1][j-1]+2,不然就赋值为f[i][j-1]和f[i+1][j]里的最大值,即求最长对称子序列。全都求出来之后排一下序就行了。#include<c

2016-11-07 07:06:30 232

空空如也

空空如也

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

TA关注的人

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