摘要:数位dp 一开始没想好怎么统计,奇偶一起考虑想不太出来。 后面看队友写了一发,过了。于是自己也写一发。
阅读全文
摘要:一眼dp,但是这道题不知怎么搞遇到点小问题,又搞了搞才出来,就是给你一些颜色。这个点有颜色,不能图,反之可以。问形成k段连续颜色的最小花费。 纯纯的dp,不知道为什么就是有问题。。。终于借鉴了别人的A过了,后面再研究吧。
阅读全文
摘要:做过类似感觉的题,但是就是没办法往状压上靠,找不到之间的联系。 题意:给你一个p,n张无中生有,m张伤害牌。抽一张牌,问杀死他的概率是多大。 20张牌直接存状态,往下转移的时候如果叶子数大于等于无中生有数加一就是边界,不能更新了。因为想象一颗满二叉树,伤害牌就是叶子,无中生有就是里面的。正好对应了这
阅读全文
摘要:从根走k步获得的最大权值。 感觉情况不容易弄全。而步数从大到小有种背包的感觉。
阅读全文
摘要:有三个人分别在三个位置,每一秒各走一步,三个城市可以联络的要求是两两权值差小于等于K。问有多少种不同的方案,让这三个人可以联络。 dp[x][y][z]表示三个人分别在x,y,z时的答案,直接转移要花n^6,考虑每个人走一步是一种状态,即再加一维表示即将要走的人是哪一个,按照顺序转移0,1,2,0,
阅读全文
摘要:给你一个边界h,w; 有n个障碍物,有障碍物的地方不能走。马走日字,问左上到右下有多少种路径。 做法:dp[i]表示不走过其他点的到这个点的路径数。 所以转移方程就有,这个点的值等于全部路径,减去,在它之前的所有障碍点到这个点的路径。因为对于每一个障碍点,都是第一次到达障碍点,所以后面只要计算全部路
阅读全文
摘要:给你一个序列,0可以变成任意数字,文最长上升子序列长度。 首先最长的肯定是0都用。 因为中间无论多少个0都不会让情况更糟糕。 然后,0单独拿出来,最后统计的时候加上就行。 最后,每个数的实际值要减去它之前的0的个数,因为要让每一个0都物尽其用,能在这个数之前塞得下。也就是说这个数会变得没有那么值钱,
阅读全文
摘要:在给的点中选出一对对点,让每两个点的距离和最大 乱搞,做过这种关于类型的,这次算比较简单的。
阅读全文
摘要:一上来RMQ,以便于把查询等东西都弄成logn的。然后预处理,因为GCD有递减趋势,并且每次改变下降都减少至少一半,所以很快就会到1,剩下的直接加进去;如果很慢到1,那么中途相等的gcd就可以二分。此复杂度为2logn,暴力起始位置,每次向左移都是logn,所以复杂度是2nlogn。 下面上代码
阅读全文
摘要:问区间内有多少数能被这个数的每一位整除 #include <iostream>#include <functional>#include <algorithm>#include <complex>#include <cstdlib>#include <cstring>#include <fstrea
阅读全文
摘要:问给定区间内,不出现62和4的个数有多少。 第一道数位dp,觉得挺好懂的。 还有一道。给你一个序列,任意打乱顺序,一样的序列算一次,问在全部排列中排名第几。 数位dp计数,预处理是排列组合,方便选位置。
阅读全文
摘要:到一个点,可以向下走,可以在自己的地方停留5分钟,求期望。 公式不错 f[u]=(5+f[u])/(x+1)+(g[u][vi]+f[vi])/(x+1),1<=i<=x,x为合法的下一个点。。 #include <iostream>#include <functional>#include <al
阅读全文
摘要:抢银行,不能高于一个概率p,一共有n个银行。下面是存款+被抓概率; dp[i][j]表示第i个银行之前,抢到j元的最大逃脱概率。 v[i]是概率,w[i]是钱数; 每次留下w[i]的空间,由之前的那个状态到这个状态(抢这个银行),又因为独立,所以就乘以概率就行; dp[i][j]=max(dp[i-
阅读全文
摘要:找对称的最大阵,对角线为左下到右上。 一上来读错了,以为只要验证对角线上的块,写成了区间dp,wa。。。 后来没想,直接2*n*n*n。。。直接超时,最后才好了一点。 #include <cstdio>#include <iostream>#include <vector>#include <cma
阅读全文
摘要:题意是:给你n和k,一个老鼠从左上角开始走,每次可以往一个方向走1~k中的任何一个值,但是每一步必须比前一步的值大,问获取的最多的值是多少? 简单记忆化搜索,dp[i][j]表示当前位置能获取的最大值,但是要注意,考虑全所有的情况才能用记忆化搜索,只要没有后效性,大部分dfs,我觉得理论上都能用记忆
阅读全文
摘要:题意:给出的一系列的数字,每次只能从队首或者队尾出队,第n个出队就拿这个数乘以n,最后将和加起来,求最大和 思路:由里向外逆推区间,一上来初始化,完了再一层一层区间dp上去。 #include <cstdio>#include <iostream>#include <vector>#include
阅读全文
摘要:动态规划,意思简洁明了。 排序,n^2做法。 每次检测可行的长条,最高的永远是起始点。 dp[i][0]表示第i个长条的左边下去最短的时间。 dp[i][1]表示第i个长条的右边下去最短的时间。 #include <cstdio>#include <iostream>#include <vector
阅读全文
摘要:第一个是最长公共子序列 不连续 #include <cstdio>#include <iostream>#include <vector>#include <cmath>#include <set>#include <map>#include <queue>#include <algorithm>#
阅读全文
摘要:找准状态 然后就是考研代码能力了。 给你n,m,让你在n个人里找m个人,使这m个人的两数之差最小,如有多解就输出最大和的那个。 dp[j][k]表示挑选j个人且差为k时的最大和。因为数据不大这样搞又简单又方便。 状态转移自然是:上一个点如果可以到达,就对这个点扫所有的已知数据,如果这个点没有出现过并
阅读全文
摘要:背包,初始化成无穷大/小,可以记录路径。#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <vector> #include <map> #include <set> #include
阅读全文