随笔分类 - 思维
5950 Recursive sequence (矩阵快速幂)
摘要:题意:递推公式 Fn = Fn-1 + 2 * Fn-2 + n*n,让求 Fn; 析:很明显的矩阵快速幂,因为这个很像Fibonacci数列,所以我们考虑是矩阵,然后我们进行推公式,因为这样我们是无法进行运算的。好像有的思路,最后也没想出来,还是参考的大牛的博客 http://blog.csdn.
阅读全文
HDU 5514 Frogs (数论容斥)
摘要:题意:有n只青蛙,m个石头(围成圆圈)。第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过的石头的下标总和是多少? 析:首先可以知道的是第 i 只青蛙可以跳到 k * gcd(ai, m),然后我就计算所有的等差数列,但是好像如果全算,那么就可能会有重复,所以我们考虑用容斥原理。 先把 m 的所有因
阅读全文
HDU 4893 Wow! Such Sequence! (树状数组)
摘要:题意:给有三种操作,一种是 1 k d,把第 k 个数加d,第二种是2 l r,查询区间 l, r的和,第三种是 3 l r,把区间 l,r 的所有数都变成离它最近的Fib数, 并且是最小的那个。 析:觉得应该是线段树的,但是。。。不会啊。。。就想胡搞一下。 所以用了树状数组,也就是和的,然后用一个
阅读全文
UVa 1471 Defense Lines (二分+set优化)
摘要:题意:给定一个序列,然后让你删除一段连续的序列,使得剩下的序列中连续递增子序列最长。 析:如果暴力枚举那么时间复杂度肯定受不了,我们可以先进行预处理,f[i] 表示以 i 结尾的连续最长序列,g[i] 表示以 i 开头的连续最长序列,然后再去找最长的, 枚举 i,然后用set来维护一个单调上升的序列
阅读全文
Gym 100531J Joy of Flight (几何)
摘要:题意:你从开始坐标到末尾坐标,要经过 k 秒,然后给你每秒的风向,和飞机的最大速度,问能不能从开始到末尾。 析:首先这个风向是不确定的,所以我们先排除风向的影响,然后算出,静风是的最小速度,如果这都大于最大速度,肯定是不可能,如果可能, 再计算出每秒走的单位长度,然后再模拟整个过程。 代码如下:
阅读全文
数据结构 课程安排 (拓扑排序)
摘要:Description 针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划。 Input 第一行为样例组数T。每组样例第一行为课程数量n(1 <= n <= 5000),以下n行每行表示一门课程名称。接下来为关系数量m(1 <= m <= 10000),每
阅读全文
POJ 2452 Sticks Problem (暴力或者rmq+二分)
摘要:题意:给你一组数a[n],求满足a[i] < a[k] < a[j] (i <= k <= j)的最大的 j - i 。 析:在比赛时,我是暴力做的,虽然错了好多次,后来说理解是rmq,我又用rmq写了一次,发现rmq还没有我暴力快,rwq 2000多,暴力才700. 暴力中加了一个优化条件就是前枚
阅读全文
CodeForces 446A DZY Loves Sequences (DP+暴力)
摘要:题意:给定一个序列,让你找出一个最长的序列,使得最多改其中的一个数,使其变成严格上升序列。 析:f[i] 表示以 i 结尾的最长上升长度,g[i] 表示以 i 为开始的最长上升长度,这两个很容易就求得,最后枚举中间值即可。 代码如下:
阅读全文
CodeForces 731F Video Cards (数论+暴力)
摘要:题意:给定 n 个数,可以对所有的数进行缩小,问你找出和最大的数,使得这些数都能整除这些数中最小的那个数。 析:用前缀和来做,先统计前 i 个数中有有多少数,然后再进行暴力去找最大值,每次都遍历这一段就好。 代码如下:
阅读全文
UVaLive 6834 Shopping (贪心)
摘要:题意:给定 n 个商店,然后有 m个限制,去 c 之前必须先去d,问你从0到n+1,最短路程是多少。 析:我们我们要到c,必须要先到d,那么举个例子,2 5, 3 7,如果我们先到5再到2,再到7再到3,那么3-5这个区间我们走了4次,如果我们先到7再到2, 那么就只走了3次,这很明显是最优的,所以
阅读全文
UVaLive 6832 Bit String Reordering (模拟)
摘要:题意:给定一个01序列,然后让你你最少的操作数把这它变成目标。 析:由于01必须是交替出现的,那么我们就算两次,然后取最值。 代码如下:
阅读全文
CodeForces 124C Prime Permutation (数论+贪心)
摘要:题意:给定一个字符串,问你能不能通过重排,使得任意一个素数p <= 字符串长度n,并且 任意的 i <= 长度n/素数p,满足s[p] == s[p*i]。 析:很容易能够看出来,只要是某个素数的小于等于该素数的倍数都是一样的,然后如果他和其他素数也有倍数,那么这些位置也是一样的, 所以我们只要找到
阅读全文
SPOJ BALNUM (数位DP)
摘要:题意:求区间内出现过的奇数是偶数,出现过的偶数是奇数的个数。 析:这个题是要三进制进行操作的。dp[i][j] 表示前 i 位,状态是 j,可以用三进制来表示 0表示没有出现,1表示奇数,2表示偶数。 代码如下:
阅读全文
POJ 3252 Round Numbers (数位DP)
摘要:题意:求区间内一个数二进制位1的数量大于等于0的数的个数。 析:dp[i][j][k] 表示前 i 位,长度为 j 的,1的数量是 k。注意前导0. 代码如下:
阅读全文
CodeForces 55D Beautiful numbers (数位DP)
摘要:题意:给求给定区间中该数能整除每一位的数的数量。 析:dp[i][j][k] 表示前 i 位,取模2520为 j,最小倍数是 k,但是这样,数组开不下啊,那怎么办呢,其实,0-9的最小公倍数的不同各类并没有那么多, 其实就48种,所以我们可以给这48个一个编号,然后就能开出来了。 代码如下:
阅读全文
HDU 4352 XHXJ's LIS (数位DP+LIS+状态压缩)
摘要:题意:给定一个区间,让你求在这个区间里的满足LIS为 k 的数的数量。 析:数位DP,dp[i][j][k] 由于 k 最多是10,所以考虑是用状态压缩,表示 前 i 位,长度为 j,状态为 k的数量有多少,再结合nlogn的LIS, 就能搞定这个题目了。 代码如下:
阅读全文
HDU 4055 Number String (计数DP)
摘要:题意:由数字1到n组成的所有排列中,问满足题目所给的n-1个字符的排列有多少个,如果第i字符是‘I’表示排列中的第i-1个数是小于第i个数的。 如果是‘D’,则反之。 析:dp[i][j] 表示前 i 个数以 j 结尾有多少个,然后如果是 I ,那么就好,就是 i-1 中的前j-1项和,如果是 D,
阅读全文
HDU 2196 Computer (树形DP)
摘要:题意:给定一棵树,然后让你找出每个结点离所有结点的最远距离。 析:也就说我们要知道离每个结点的最远距离,对于每个结点,我们知道离它最远的,要么是从父结点过来,要么是从子树中得到,dp[i][0] 表示从 i 子树中得到的 最远距离,dp[i][1] 表示 i 从子树得到的次远距离,dp[i][2]
阅读全文
HDU 4756 Install Air Conditioning (MST+树形DP)
摘要:题意:n-1个宿舍,1个供电站,n个位置每两个位置都有边相连,其中有一条边不能连,求n个位置连通的最小花费的最大值。 析:因为要连通,还要权值最小,所以就是MST了,然后就是改变一条边,然后去找出改变哪条能使得总花费最大,dp[i][j] 表示那条边左边的 i 和右边的 j, 最短距离,然后枚举MS
阅读全文
HDU 4126 Genghis Khan the Conqueror (树形DP+MST)
摘要:题意:给一图,n个点,m条边,每条边有个花费,给出q条可疑的边,每条边有新的花费,每条可疑的边出现的概率相同,求不能经过原来可疑边 (可以经过可疑边新的花费构建的边),注意每次只出现一条可疑的边,n个点相互连通的最小花费的期望。 析:要想连通先让他们连通起来,先构造出一个MST,然后再暴力,如果这个
阅读全文