04 2016 档案

摘要:DP。 先dp处理出每一行能得到的最大价值,再dp选择哪几行获得最大价值。 行列选择的本质是一样的操作。 阅读全文
posted @ 2016-04-30 13:17 Fighting_Heart 编辑
摘要:01背包。 用01背包计算出一个学校都没有被录取的最小概率。 用1减去上面的概率就是答案。 阅读全文
posted @ 2016-04-30 10:23 Fighting_Heart 编辑
摘要:最大全1子矩阵面积*3 阅读全文
posted @ 2016-04-30 09:22 Fighting_Heart 编辑
摘要:POJ 3494 升级版,算三遍就可以了。 阅读全文
posted @ 2016-04-30 09:12 Fighting_Heart 编辑
摘要:POJ 2796 Feel Good HDU 1506 Largest Rectangle in a Histogram 和这两题一样的方法。 阅读全文
posted @ 2016-04-30 09:04 Fighting_Heart 编辑
摘要:单调栈还没有完全理解...写了个优雅的暴力AC了... 阅读全文
posted @ 2016-04-30 08:54 Fighting_Heart 编辑
摘要:和POJ 2796 Feel Good类似。 阅读全文
posted @ 2016-04-30 08:53 Fighting_Heart 编辑
摘要:因为已经知道了每个点的路径,所以不需要建树,不需要广搜,直接以路径为关键字对节点进行排序。 排序之后就是答案了。如果树不合法,或者一条路出现多次,或者没有根节点,输出not complete。 阅读全文
posted @ 2016-04-28 15:59 Fighting_Heart 编辑
摘要:简单DP。 dp[i][j]表示敲完第i个字符,大写键是否亮起的最小操作次数 阅读全文
posted @ 2016-04-28 11:05 Fighting_Heart 编辑
摘要:打表。输出的时候注意th,st,nd,rd。 阅读全文
posted @ 2016-04-28 09:34 Fighting_Heart 编辑
摘要:凭直觉猜测了一下,写了一个DP,居然能AC。 dp[i][j]表示第i种到第n种物品都买完且最小的单价是第j种物品时候的最小总费用 阅读全文
posted @ 2016-04-28 08:56 Fighting_Heart 编辑
摘要:最大子矩阵和 枚举两行,计算列的最大子串和。 阅读全文
posted @ 2016-04-27 20:37 Fighting_Heart 编辑
摘要:首先可以观察到一个结论:肯定是排序完之后每次选择本身就是相邻的数字。 dp[i][j]表示到前i个数字选择了j组的最小花费。 阅读全文
posted @ 2016-04-27 17:43 Fighting_Heart 编辑
摘要:简单DP 阅读全文
posted @ 2016-04-27 14:52 Fighting_Heart 编辑
摘要:1.迪杰斯特拉最小堆 2.先处理出哪些边是最短路上的,这样就构成了一个新的有向无环图,注意是无环。 每一个点最后肯定是连通的,那么我们只需要选择连到这个点的费用最小的边即可。 阅读全文
posted @ 2016-04-25 14:08 Fighting_Heart 编辑
摘要:先把能合并的区间都合并起来。 考虑最裸的贪心策略,从左到右一段一段的取。 但是,这样会有错,错在没有考虑每段区间选取最后一个点。 因为N只有10,所以枚举一下哪些区间最后一个点会被选择,然后按照最裸的的贪心策略从左到右选择即可,每次更新最大值。 阅读全文
posted @ 2016-04-25 10:45 Fighting_Heart 编辑
摘要:模拟。 阅读全文
posted @ 2016-04-24 19:21 Fighting_Heart 编辑
摘要:枚举两点,确定一条线段,计算每条线段的中点坐标。 按线段中点坐标排个序。找出每一种坐标有几个。 假设第x种坐标有y个,那么这些线段可以组成y*(y-1)/2种平行四边形。 累加即可。 阅读全文
posted @ 2016-04-24 19:20 Fighting_Heart 编辑
摘要:预处理前缀和+枚举起点+二分终点。 阅读全文
posted @ 2016-04-24 18:52 Fighting_Heart 编辑
摘要:水题。放个1就可以了。暴力的找数字也是很快的。 阅读全文
posted @ 2016-04-24 18:34 Fighting_Heart 编辑
摘要:0--M对某个数字取模,相当于把0--M区间进行切割,每次暴力切割一下。结果的算的时候二分一下即可。。。 看了官方题解才会。。。 阅读全文
posted @ 2016-04-24 13:17 Fighting_Heart 编辑
摘要:状压DP dp[s][p]用了哪几张票,到哪个节点的最小费用。 注意:G++ %.3lf输出会WA,但C++能过;改成%.3f,C++,G++都能AC 阅读全文
posted @ 2016-04-20 21:00 Fighting_Heart 编辑
摘要:莫队算法+离散化 1.map会TLE,必须离散化做 2.long long会WA,__int64定义 %I64d输出输出能AC 3.注意输入的序列会爆int 阅读全文
posted @ 2016-04-20 18:53 Fighting_Heart 编辑
摘要:莫队算法。 阅读全文
posted @ 2016-04-20 13:40 Fighting_Heart 编辑
摘要:莫队算法+树状数组转移 阅读全文
posted @ 2016-04-20 13:12 Fighting_Heart 编辑
摘要:莫队算法。 阅读全文
posted @ 2016-04-18 21:30 Fighting_Heart 编辑
摘要:莫队算法+map 阅读全文
posted @ 2016-04-18 09:22 Fighting_Heart 编辑
摘要:莫队算法。 阅读全文
posted @ 2016-04-17 20:31 Fighting_Heart 编辑
摘要:中国剩余定理。 可以手动模拟一下每一次开始的人的编号和结束的人的编号。 每次删掉一个人,对剩下的人重新编号。 这样一次模拟下来,可以得到n个方程 形如:(u[i]+k)%(n-i+1)=v[i] 化简一下就是:k%(n-i+1)=v[i]-u[i]%(n-i+1) 接下来就是求解最小的k,满足所有式 阅读全文
posted @ 2016-04-17 10:12 Fighting_Heart 编辑
摘要:看有没有0和1,都有的时候是YES,否则是NO 阅读全文
posted @ 2016-04-17 08:35 Fighting_Heart 编辑
摘要:规律很简单,画画图就能找出来了。(q-1)*(q-2)/2 裸写乘法longlong会炸,乘法写的优雅一些或者直接用Java能过。 阅读全文
posted @ 2016-04-17 08:33 Fighting_Heart 编辑
摘要:指数有递推式,可以通过矩阵快速幂来求解。再用下面这公式快速幂取模即可。 (C是素数) 阅读全文
posted @ 2016-04-17 08:12 Fighting_Heart 编辑
摘要:莫队算法。 阅读全文
posted @ 2016-04-16 18:27 Fighting_Heart 编辑
摘要:莫队算法第一题。 强制类型转换没写,WA了好久才发现...... 阅读全文
posted @ 2016-04-16 13:20 Fighting_Heart 编辑
摘要:第一列和第二列的所有和处理出来,排序。 第三列和第四列的所有和处理出来,从上面处理出来的数组中二分得到答案。 用map被卡了。。 阅读全文
posted @ 2016-04-15 19:46 Fighting_Heart 编辑
摘要:和蚂蚁问题类似。 阅读全文
posted @ 2016-04-15 19:05 Fighting_Heart 编辑
摘要:爆搜。 一个一个位置搜下去。第一列的格子可以反转也可以不反转,之后的每一列,看他左边的那一个格是1还是0,如果是1,这一格必须反转,否则必须不反转。这是一个很强的剪枝。 阅读全文
posted @ 2016-04-15 15:03 Fighting_Heart 编辑
摘要:这题好难。。第一次遇到这样的建图,表示是看了好多题解才懂的。 首先这是一个费用流的题,但是请注意,并不是达到最大流时候的最小费用。 首先分析每一个位置对答案做出的贡献,即a[i][j]*a[i][j]-2*a[i][j]*b[i][j]+b[i][j]*b[i][j],最后一项是个常数,所以我们只要 阅读全文
posted @ 2016-04-14 22:34 Fighting_Heart 编辑
摘要:枚举k,然后计算这个k需要的次数。 从左到右看,如果a[i]是背面的,那么区间[i,i+k-1]需要反转一下,暴力反转效率是o(n*n*n),必然TLE,因此需要优化。 事实上,区间反转的时候可以进行优化,g[i]=1表示区间[i,i+k-1]进行了一次反转,看某个点被反转了几次的时候只需看g[i- 阅读全文
posted @ 2016-04-14 09:22 Fighting_Heart 编辑
摘要:尺取法。 阅读全文
posted @ 2016-04-13 22:15 Fighting_Heart 编辑
摘要:尺取法。 阅读全文
posted @ 2016-04-13 16:44 Fighting_Heart 编辑
摘要:二分答案+验证。 阅读全文
posted @ 2016-04-13 15:15 Fighting_Heart 编辑
摘要:二分+验证。 这个题目精度卡的很紧。做的时候最好每个数先×100再做。 最精确的方法是字符串读入,然后转成long long。 输出的时候再把long long转回小数。 阅读全文
posted @ 2016-04-13 14:35 Fighting_Heart 编辑
摘要:先筛出H-prime,在找出所有H-semi-prime。 询问的时候二分一下。 阅读全文
posted @ 2016-04-12 23:16 Fighting_Heart 编辑
摘要:p是素数直接输出no,然后判断a^p%p和a是否相等。 阅读全文
posted @ 2016-04-12 22:32 Fighting_Heart 编辑
摘要:快速幂取模 阅读全文
posted @ 2016-04-12 09:03 Fighting_Heart 编辑
摘要:题目看了半小时才看懂的。 题意:首先根据给出的序列,构造出哈夫曼树,构造出来的是一棵二叉树,每个节点都有一个权值,每个节点的两个儿子只能取一个,问能否使取出来的节点权值之和刚好等于e。 这样一分析就很容易看出是01背包。但是,背包容量特别大!不能纯粹的用循环做背包肯定会超时。可以使用两个队列存能够凑 阅读全文
posted @ 2016-04-11 20:00 Fighting_Heart 编辑
摘要:简单模拟题。一个int写成了char,搞了4个多小时。真垃圾。。 阅读全文
posted @ 2016-04-11 14:23 Fighting_Heart 编辑
摘要:水题。 算一下每个人和之前的人握手次数+之后的人和这个人握手次数。取最大值。 阅读全文
posted @ 2016-04-11 10:08 Fighting_Heart 编辑
摘要:简单规律题...没看懂题目直接从输出中找到了规律。 先不管是不是闰年,前后两项的差值会形成一个等差数列,公差是64.。。 输出的时候再判一下闰年即可。 阅读全文
posted @ 2016-04-11 09:50 Fighting_Heart 编辑
摘要:水题,判断一下加起来是否大于等于80 阅读全文
posted @ 2016-04-11 09:44 Fighting_Heart 编辑
摘要:答案=所有情况中总共递减次数*2 放完i个和放完i-1个之间的递减次数是可以递推的。 有一部分是放完i-1个之后产生的,还有一部分是放完第i个之后新产生的。 注意减去多加的部分。 2的i次方可以打个表,然后就再开一个sum预处理2的i次方的前缀和,就可以递推了。 阅读全文
posted @ 2016-04-11 09:40 Fighting_Heart 编辑
摘要:费用流裸题......比赛的时候少写了一句话....导致增加了很多无用的边一直在TLE 阅读全文
posted @ 2016-04-10 20:43 Fighting_Heart 编辑
摘要:线型素数筛+质因素分解+组合数。 AC后发现这样做效率有点低。。766ms。 阅读全文
posted @ 2016-04-10 11:18 Fighting_Heart 编辑
摘要:要输出分母最小的分数。 所以需要枚举一下哪一个位置是循环的起点。 阅读全文
posted @ 2016-04-10 09:53 Fighting_Heart 编辑
摘要:广搜。 阅读全文
posted @ 2016-04-08 21:26 Fighting_Heart 编辑
摘要:设答案为ans1,ans2 ans1=a1*gcd,ans2=a2*gcd,a1,a2互质 gcd*a1*b1=lcm,gcd*a2*b2=lcm a1*b1=lcm=(ans1*ans2)/gcd=a1*a2 综上所诉,a1=b2,a2=b1。 也就是说,ans1=gcd*k1,ans2=gcd* 阅读全文
posted @ 2016-04-08 19:58 Fighting_Heart 编辑
摘要:这个问题等价于求最小生成树中权值最大的边。 阅读全文
posted @ 2016-04-08 16:19 Fighting_Heart 编辑
摘要:最大生成树。 阅读全文
posted @ 2016-04-07 09:29 Fighting_Heart 编辑
摘要:最小生成树。 阅读全文
posted @ 2016-04-07 09:14 Fighting_Heart 编辑
摘要:最短路水题,正向边,反向边各跑一次。 阅读全文
posted @ 2016-04-06 21:11 Fighting_Heart 编辑
摘要:SPFA判一下是否存在负环即可。 阅读全文
posted @ 2016-04-06 19:33 Fighting_Heart 编辑
摘要:水题,Floyd。 阅读全文
posted @ 2016-04-06 09:15 Fighting_Heart 编辑
摘要:水题。枚举中间,暴力算最远的。也可以用(Manacher) 阅读全文
posted @ 2016-04-06 08:51 Fighting_Heart 编辑
摘要:并查集。 一个人拆成两个点,如果告知a和b不在一个中,那么把a,b+n并到一个集合中,把a+n,b也并到一个集合中。 询问的时候,如果a和b在一个集合中,输出在一个集合中 如果a和b+n在一个集合中,输出不在一个集合中 剩下的情况输出不确定。 阅读全文
posted @ 2016-04-04 19:02 Fighting_Heart 编辑
摘要:并查集。 阅读全文
posted @ 2016-04-04 18:40 Fighting_Heart 编辑
摘要:枚举中位数+优先级队列预处理前x个数选n个最小和 阅读全文
posted @ 2016-04-04 15:57 Fighting_Heart 编辑
摘要:01背包。把一个属性当成费用,另一个属性当成价值。费用可能为负数,处理的时候加上100000就可以了。 阅读全文
posted @ 2016-04-03 21:06 Fighting_Heart 编辑
摘要:区间DP。 dp[i][j]表示把区间[i,j]变成回文的最小花费。 阅读全文
posted @ 2016-04-02 21:48 Fighting_Heart 编辑
摘要:暴力DFS。 注意行列不要打错。。 阅读全文
posted @ 2016-04-01 08:39 Fighting_Heart 编辑