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