自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 机器学习入门:监督学习与无监督学习

机器学习:学习的过程就是举一反三的过程。 例如,中学阶段通过做大量的练习题,为的就是在高考解决问题。高考的题目一般来说是之前肯定没有遇到过的,但是这并不意味着这些题目我们无法解决。通过对之前所做过的练习题的分析,找到解题方法,同样可以解决陌生的题目。 机器学习其实就是将这一套方式运用到机器上,利用一些已知的数据来训练机器(做练习题),让机器自己分析这些数据,并找到内在联系(学习解题方法),从而对

2017-03-31 16:45:31 10959

原创 HDU - 5781 概率DP + 找规律

题意:有一个ATM机中有[0,k]的存款,每次取x个,如果存款大于等于x,那么就可以直接取出x,如果不足x,那么会触发一次警报,如果触发警报次数超过上限,就会被警察抓,问在最优策略下,通过尽量少的次数取得所有存款,问期望次数是多少。思路:一道概率dp,dp[i][j]就表示剩余i次警报及存款上限为j的情况下的期望,在这种情况下,假设每次取出x元,这时候会有两种可能:1.存款大于等于

2017-03-30 20:51:48 415

原创 HDU - 5765 状压dp + 高维前缀和

题意:求出图中每条边分别属于多少个极小割集。思路:多学学别人的套路吧。。极小割一定可以将图分割成两个连通分量。所以其实我们枚举两个连通分量,其实就等价于枚举极小割。注意到点数目很少,可以状态压缩,一个点集合为s,那么另一部分集合就是(1找到了每个最小割,但是并不能每次都给最小割的边依次+1,复杂度爆炸。换个思路,对于每条边(u,v),可以用极小割的总数-(u,v)不参与的极

2017-03-29 18:16:32 729

原创 HDU - 5768 容斥原理 + 中国剩余定理

题意:给出一个范围[l,r]以及两个数组a,p,要求在这范围内mod 7 = 0,且mod p[i] != a[i]的数一共有多少个。思路:容斥原理,只考虑把a[0] = 0,p[0] = 7,只考虑这mod 7 = 0的数,进行容斥。利用中国剩余定理解同余式组。代码:#include using namespace std;typedef long long LL;v

2017-03-28 12:20:06 592

原创 hihocoder - 1487 并查集

题意:中文题。思路:并查集,周长变化可以算出来。代码:#include using namespace std;const int MAXN = 1111111;int pa[MAXN];int Find(int x) { return x == pa[x] ? x : pa[x] = Find(pa[x]);}const int dx[] = {0,

2017-03-28 11:02:21 368

原创 HDU - 5775 树状数组

题意:给出一个排列,要求用题目中的排序算法排序之后,算出每个数所到达的最左端和最右端位置的绝对值之差。思路:树状数组,每个数往右移动的距离就是右边比它小的数的个数,而左端点的位置就是初始位置和最终位置的较小值。代码:#include using namespace std;const int MAXN = 111111;struct BIT { int n;

2017-03-24 14:23:05 443

原创 HDU - 5773 贪心 + LIS

题意:给出一串序列,其中每个0可以转化成任何数,问转化过后,最长的严格递增子序列的长度。思路:贪心的思路很巧妙,首先如果是排在LIS的左右两端的0,都可以不考虑,最后再加上,因为0可以变成任何数。如果是出现在中间的0,可以这样思考,因为0可以变成任何数,灵活度最高,所以最后能求出的最长上升子序列一定至少有一种情况是包含了所有的0。既然0肯定会出现在最终的结果LIS中,那么我们不

2017-03-24 13:41:50 439

原创 HDU - 5763 KMP + DP

题意:给出两个字符串s和t,其中t有两种意义,s中可能包含若干t,问s一共有多少种意义思路:KMP预处理出匹配位置,然后dp代码:#include using namespace std;typedef long long ll;const int MAXN = 111111;const ll MOD = 1000000007;int Next[MAXN];boo

2017-03-24 10:29:55 421

原创 HDU - 5755 高斯消元解同余方程

题意:n*m的矩阵,每个矩阵都有0,1,2三种数值,一开始每个点都有一个初始值,每次可以选择一个位置+2,然后该位置的上下左右都+1,问多少次之后可以将所有位置的数值都变成0。思路:很典型的开关问题,没什么好说的,高斯消元,不过这题不是以前的异或方程,而是模3同余方程。代码:#include using namespace std;const int MAXN = 1111

2017-03-23 14:42:19 711

原创 HDU - 5762 思维 + 抽屉原理

题意:给出n个点的坐标,和所有点的范围m,判断是否存在两对点的曼哈顿距离相同,两对点不能完全相同,但可以有一个公共点。思路:n很大,但是不要被被迷惑,给出了坐标的范围是1e5*1e5,那么这个范围中的曼哈顿距离只有2e5这么多种可能性。所以当n*n>2e5时,根据抽屉原理,一定至少存在两个距离相同。代码:#include using namespace std;const

2017-03-23 11:26:40 391

原创 HDU - 5754 博弈 + 找规律

题意:G和B玩游戏,在n*m的棋盘上轮流移动一枚棋子,棋子一开始位置在(1,1),每次只能朝右下角移动,不同棋子类型移动的规则不同,现在两个人都采取最优策略,B先手,判断谁会赢。思路:先百度国际象棋移动规则,然后前三个根据规则画一画必胜态必败态就能找到规律,最后一个我是看不出来规律,反正n和m也不大,直接递推预处理了。代码:#include using namespace s

2017-03-23 10:57:20 430

原创 HDU - 5733 思维题 + 找规律

题意:给出一个数n,问在序列1到n的所有排列中,如果排列h某一位置的h[i]>h[i-1]&&h[i]>h[i+1],则价值v加上c[i],问v的期望是多少思路:其实还是有思路值得借鉴的,如果眼拙看不出来规律(比如我),不妨分析一波。最后要求的是期望,由于期望满足可加性,所以我们只要算出来每个位置对于最后期望的贡献即可。在2~n-1的位置上,每个位置pos对于左右都有6种不同的大小

2017-03-22 16:30:18 369

原创 HDU - 5742 暴力枚举

题意:有n个数的序列,但是其中只有m个数是确定的,现在要构造序列,保证序列是非递减的,且总和sum不能为0,序列中的每个数的范围是[0,100],要求构造出来的序列满足(a[1]+a[2])/sum最大,求出这个最大值,要以最简分数形式输出。思路:数学不好,直接枚举,显然3到n这一段是越小越好,可以确定这一段的取值,然后在满足条件的情况下,枚举a[1]和a[2]即可。代码:

2017-03-21 17:20:44 292

原创 HDU - 5730 CDQ分治 + FFT

题意:有一串长度为n的序列,可以任意划分,题目给出长度从1到n的块的价值,每一种划分的价值等于划分出来的所有块的价值的乘积,问所有划分方法得到的价值的总和是多少?思路:这题很容易就能得到状态转移方程,设dp[i]是长度为i的序列的价值总和,那么就有状态转移方程:然而计算这样的状态转移需要花费O(n^2)的时间,不能满足要求。注意观察到这是一个离散卷积形式,可以用FFT来加速

2017-03-21 14:15:31 482

原创 HDU - 4609 FFT

题意:给出n个长度,要求任意选择3个长度,能组成三角形的概率。思路:这也是一种常见的FFT题型,初看这个可能很难和FFT能解决的多项式联系到一起。首先既然要组成三角形,一定要保证两边之和大于第三边,那么我们可以枚举一条边为x,然后看不超过x的两边之和一共有多少情况,这个很容易,只要求出来两边之和==0,1,..Max的种类数,然后用一个前缀和保存就行了。现在关键是怎么对于任意一

2017-03-20 21:25:28 414

原创 HDU - 1408 FFT模板题

题意:两个大数相乘。思路:这题是典型的FFT。所谓FFT,也就是快速傅里叶变换,是一种加速两个多项式系数相乘的算法,可以通过插值表示多项式的思想,将多项式从系数形式转化成点值形式,点值形式的多项式相乘只需要O(n),而FFT的关键就在于点值形式和系数形式之间的相互转化,可以利用分治的思想达到O(logn)的复杂度。关于FFT的详细推导可以学习算法导论第30章。一个题目如果需

2017-03-20 20:44:04 859

原创 hihocoder - 1483 二分 + 尺取法

题意:给出n个数,然后定义一个v(l,r)为下标区间[l,r]中相同的点对数,如对于1,1,1这个序列来说,v(1,2)=1,v(1,3) =3,v(1,1)=0。要求所有n*(n+1)/2个区间的价值第k小的是多少。思路:这题没做出来确实不应该。想到了尺取法,结果没想出来二分验证来找第k小的。二分答案x=(l+r)/2,每次判断价值能大于x的区间有多少个,如果这个数目大于n*

2017-03-19 17:30:40 621

原创 HDU - 5728 欧拉函数 + 数学推导 + 指数循环节

题意:已知:其中n是一个没有重复质因子的数,而φ(x)就是欧拉函数。求解ans的值。思路:首先要知道欧拉函数的公式:其中,p1到pn是x不重复的质因子。根据这个公式以及定义,很容易能推导出欧拉函数的几个性质:有了这些准备就可以求k了,假设p是n的其中一个质因子,将i分成两个部分,i%p!=0和i%p=0,那么就可以进行如下推导:关于上式中

2017-03-19 15:32:51 713

原创 HDU - 5727 暴力 + 二分图匹配

题意:给出n个阳珠子和n个阴珠子,排成一个环,要求相邻的两个珠子不能同阴或同阳。另外给出m个关系(u,v),如果阳珠子u和阴珠子v相邻就会褪色一次。问最有情况的组合最少褪色几次。思路:二分图匹配,暴力枚举所有阴珠子的排列,因为是环形所以又(n-1)!种情况,然后针对每一种排列,往相邻的两个阴珠子中插入阳珠子,插入的位置一共有n个,如果一个阳珠子不会和前一个以及后一个阴珠子产生褪色,那么

2017-03-18 11:25:06 354

原创 HDU - 5726 RMQ + 二分

题意:给出一串n个数的序列,然后给q个询问,每个询问查询在下标区间[l,r]的数的gcd是多少,然后问这n个数中有多少个区间的gcd等于这个询问的gcd。思路:求解gcd,没有修改操作,可以想到用RMQ,可以O(1)查询。剩下的是怎么求每个gcd对应有多少个区间。从左向右枚举左端点,那么可以发现左端点l固定的情况下,gcd会随着向右而不递增。这就有了二分的性质,我们二分出每个gcd

2017-03-17 21:06:32 303

原创 HDU - 5724 博弈sg函数 + 状态压缩

题意:给出n行格子,每行格子长度为20,现在每一行的某些格子里都会放上一枚棋子,现在A和B要轮流移动这些棋子,每个棋子只能向右移动最近的一个空的格子上,而且两个棋子不能占用同一个格子,若谁不能移动就是输,在双方都采取最优策略的情况下,问谁赢谁输。思路:博弈,sg函数的一种应用,由于每行只有20个格子,可以考虑状态压缩。这里sg函数可能的取值只有0到19,因为每一行的格子最多只有20个,

2017-03-17 18:21:50 347

原创 HDU - 4388 博弈 + 找规律

题意:给出n堆物品,每堆物品都有若干件,现在A和B进行游戏,每人每轮操作一次,按照如下规则:1. 任意选择一个堆,假设该堆有x个物品,从中选择k个,要保证02. 再增加一个大小为x^k的堆,另外有一个技能,可以将这个大小为x^k的堆变成(2*k)^x的堆,但是这个技能每个人只有一次机会可以使用。现在问两人轮流操作,都采取最优策略,最后不能操作的人输,问谁会赢。思路:好题。看

2017-03-17 16:20:31 1028

原创 HDU - 2174 博弈基础

题意:一个n*m个格子的棋盘上在(1,m)位置上有一枚棋子,这枚棋子每次可以向下,或向左,或向左下角移动一格,a和b进行移动棋子的游戏,a先移动,最后无法移动的人输,问在两个人都是最优操作的情况下,最后谁会赢。思路:为了方便考虑,我们定义棋子先(n,m)移动到(1,1),f[1][1]就是终结点,也就是必败点。最后的答案就是f[n][m],然后根据必胜点和必败点的规则,依次往后递推

2017-03-16 12:13:31 577

原创 HDU - 5723 最小生成树 + 树形dp

题意:给出n个点和m条边,每条边有一个权值,题目保证每条边的权值都不一样,求出一个权值最小生成树,并且求出任意选择n个点中的两点之间距离的权值的最小期望。思路:最小生成树没什么好说的,因为每条边权值不一样,所以可以保证求出的最小生成树一定只有一个解。按照求出的最小生成树建一棵树,所谓期望=任意两点之间的距离和/C(n,2),这样只要求出任意选择两个点的所有情况的距离和即可,dp一下。

2017-03-16 10:31:53 395

原创 HDU - 5521 最短路 + 建图

题意:给出n个点的一个图,每个点属于一个块或者几个块,保证第i块内的点都可以用时间ti互相到达,现在A在点1,B在点n,他们要找一个点开会,会议必须要双方都到场才能开始,问会议最快能需要多长时间能开始,另外按升序输出保证时间最小的可选择的开会的点的序号。思路:主要是考建图,暴力建图是不行的,这里每个块建立一个中转点,让中转点和该块内的所有点都连上长度为t的边,这样每次从一个点到达块

2017-03-15 19:13:29 350

原创 HDU - 5510 KMP + 尺取法

题意:给出n个字符串s[1]到s[n],找到最大的编号i,使得s[i]之前的字符串中存在至少一个不是s[i]的子串。思路:好题。kmp是一定的。利用尺取法的思想,设置两个指针l和r,那么对于s[l]和s[r]就存在两种情况:1. s[l]是s[r]的子串,那么++l2. s[l]不是s[r]的子串,那么更新ans=r,然后++r之所以不考虑l之前的字符串,是因为按照

2017-03-15 18:23:00 423

原创 hihocoder - 1479 树形dp

题意:给出一个有根树,每个节点都有一个权值,在其中选出不是根节点的两个节点,将这两个节点与其父亲之间边删去,可以将这棵树分成三个部分,求一共有多少种分法,可以让这三个部分的权值和相等。思路:这题一开始看错了题怎么都过不了,题目中说父亲节点为0的就是根节点,而我看成了0就是根节点,最后看别人代码才发现自己题读错了,太蠢。树形dp,很显然如果存在这样的分法,所有节点的权值总和sum

2017-03-15 15:23:22 468 2

原创 HDU 5714 树状数组 + 离散化

题意:Problem Description小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左航行,有的船只向右航行。小明希望拍下这一美丽的风景,并且把尽可能多的船只都完整地拍到一张照片中。小明位于河的边上,并且可以在河边的任意位置进行拍照,照相机的视野恰好为90度角,只能以垂直于河边的方向进行拍照。河上的船只全都可看作是平行于河边的一条线段,跟河边的距离各不

2017-03-10 16:46:19 395

原创 51nod - 1672 线段树(插队问题变形)

题意:给出n个数,再给出m个区间,要求从中选择k个区间,要求k个区间的所重合的部分的和的最大值。思路:线段树。首先先将n个数按照右端点排序,然后从n到1枚举每个位置作为最后并出来区间的右端点,对于每个确定的右端点R,我们就是要找到一个L保证[L,R]这段区间至少能被k个区间所覆盖。当枚举到位置pos的时候,就是要找区间右端点r >= pos,且区间左端点l 这里就可以利用线

2017-03-09 21:35:46 535

原创 POJ - 2828 线段树(插队问题)

题意:每个人选择一个位置进入队列,后来的人会插到先来的人前面,问最后队伍上每个人的编号是多少。思路:插队问题,线段树单点更新,后来的人更有主动权,所以只要倒着考虑即可。然后每次插入到当前队列的第p[i]个空位上,sum[i]表示前i个位置中还有多少个空位。代码:#include #include #include using namespace std;#define

2017-03-09 20:26:57 421

原创 51Nod - 1821 思维题 + 并查集 + 二分

题意:一个集合S的优美值定义为:最大的x,满足对于任意i∈[1,x],都存在一个S的子集S',使得S'中元素之和为i。给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2,以及一个数k,要求选择一个S2的子集S3(|S3|(集合元素可以重复)Input第一行一个数n,(n<=1000)接下来n行,每行描述一个集合:第一个数m,表示集合

2017-03-08 16:43:24 497

原创 HDU - 3585 最大团 + 二分

题意:给出n个点,要求在其中找到k个点,使得任意两个点的最短距离最大。思路:最大化最小值,很明显要二分答案判断是否可行,关键是判断可行的方案,直接对于这n个点求一个最大团,这个团满足任意两个点的距离都要大于等于当前二分的答案,看这样求出的最大团的大小是否大于等于k。代码:#include #include #include #include #include

2017-03-06 18:25:30 354

原创 HDU - 5952 暴力dfs

题意:在一个图中计算大小为s的团有多少个。思路:直接暴力搜索,但是要注意搜的过程很显然会出现重复,这时候我们搜索的时候其实可以选择每次新加入的点要比当前的已经完成的子图中的点要大,这样就可以避免枚举的时候出现重复,既然这样可行,我们可以换一种思路,直接在建图的时候只保存由小点指向大点的单向边即可,很巧妙。代码:#include #include #include #inc

2017-03-06 16:37:38 467

原创 ZOJ - 1492 dfs剪枝求最大团

题意:要求一个不超过50个点的图中最大完全子图(团)的大小。思路:dfs + 剪枝 + 记忆化学习了这篇博客的思路:http://www.cnblogs.com/zhj5chengfeng/archive/2013/07/29/3224092.html所谓团,就是一个完全子图,也就是在一个图中找到一个子图,满足任意子图中两个点都有边相连,最大团顾名思义就是点最多的团。N

2017-03-06 16:27:59 972

原创 51Nod - 1478 单调栈 + 二分

题意:找出一串括号序列中的最长的合法子串的长度以及数目。思路:如果对于括号序列,'('表示+1,')'表示-1,一串合法的括号序列要保证这样的前缀和序列首尾都是0,且序列中间的前缀和值不能小于0。对于这道题来说,找到每个前缀和sum[p]之后与之相邻最远的且相同的前缀和的位置q,那么[p+1,q]这一段就是以这个p+1开头的最长的合法括号序列。这里可以对于每个位置p利用单调栈求

2017-03-05 12:43:21 319

空空如也

空空如也

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

TA关注的人

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