09 2018 档案

摘要:二分分为二分查找和二分答案。 设数组下标为1~n 二分查找。实际上就是一个有序数列中有一个解,然后搜一遍求这个解。而直接for循环暴搜一遍的话时间复杂度是O(n),而用二分查找可以降低时间复杂度,为O(logn);而数组形象化出来的话就是0000010000000(0为无解,1为有解),二分就是要找 阅读全文
posted @ 2018-09-25 16:51 Sugewud 阅读(154) 评论(0) 推荐(0)
摘要:还有这种操作??????直接用pre到now转移的方式构造一个矩阵就好了。二进制长度为m,就构造一个长度为1 #include#include#define REP(i, a, b) for(int i = (a); i 4) return; if(l == 4) ... 阅读全文
posted @ 2018-09-24 17:03 Sugewud 阅读(172) 评论(0) 推荐(0)
摘要:本来直接一波状压dpAC的#include#include#include#define REP(i, a, b) for(int i = (a); i m) return; if(l == m) { path[p][0] = pre; path[p++][1]... 阅读全文
posted @ 2018-09-24 16:44 Sugewud 阅读(174) 评论(0) 推荐(0)
摘要:这道题的解析这个博客写得很好https://blog.csdn.net/shiwei408/article/details/8821853大致意思就是我们可以只处理两行之间的关系,然后通过这两个关系推出所有行(有点像矩阵快速幂的思想)几个要注意的地方(1)第0行为全1... 阅读全文
posted @ 2018-09-24 16:12 Sugewud 阅读(180) 评论(0) 推荐(0)
摘要:上来直接一波敲键盘,直接套Tsp问题的代码然后WA发现貌似这道题没有连续性。Tsp问题是一条路径,一个点到另一个点,多了一个限制,所以就需要加多一维而这道题没有限制,也就是说那一维不需要加,我加了还WA然后要搞清楚状态,在纸上可以写,写清楚了再敲代码这道题一开始都是存... 阅读全文
posted @ 2018-09-24 14:54 Sugewud 阅读(141) 评论(0) 推荐(0)
摘要:这道题千辛万苦啊!这道题要涉及到当前点和前面两个点,那就设dp[state][i][j]为当前状态为state,当前点为i,前一个点为j这个状态表示和之前做炮兵那题很像,就是涉及到三个点时,就多设一维表示前一个点(炮兵那题把点换成行)这道题有很多细节需要注意(1)计算... 阅读全文
posted @ 2018-09-24 12:24 Sugewud 阅读(127) 评论(0) 推荐(0)
摘要:(1)这道题最多可以走两次,所以有0, 1, 2三种状态,所以我们要用三进制如果要用三进制,就要自己初始化两个数组, 一个是3的n次方,一个是三进制数的第几位的数字是什么void init(){ three[0] = 1; REP(i, 1, 11) three[i... 阅读全文
posted @ 2018-09-24 10:44 Sugewud 阅读(137) 评论(0) 推荐(0)
摘要:在平时写程序中,那些下标加1减1问题我总是纠结很久,现在总结一下(1)对称问题下标从0开始,是#include#define REP(i, a, b) for(int i = (a); i #define REP(i, a, b) for(int i = (a); i... 阅读全文
posted @ 2018-09-24 09:19 Sugewud 阅读(331) 评论(0) 推荐(0)
摘要:这道题就是Tsp问题,稍微加了些改变 注意以下问题 (1)每个点可以经过多次,这里就可以用弗洛伊德初始化最短距离 (2)在循环中集合可以用S表示更清晰一些 (3)第一维为状态,第二维为在哪个点,不要写混。 (4)在dp过程中0这个点是不用的,只用到1到n这个点 而实际上dp过程中用的是0到n-1,所 阅读全文
posted @ 2018-09-23 23:26 Sugewud 阅读(145) 评论(0) 推荐(0)
摘要:https://blog.csdn.net/accry/article/details/6607703 阅读全文
posted @ 2018-09-23 22:40 Sugewud 阅读(159) 评论(0) 推荐(0)
摘要:这题和poj 3254很像,但是更复杂了一些都属于棋盘里放东西,然后又各种各样的限制,然后求方案或者最大值(1)上一道题距离要大于1,这道题是大于2。所以判断的时候变成!(x & (x #include#include#define REP(i, a, b) for(... 阅读全文
posted @ 2018-09-23 22:38 Sugewud 阅读(144) 评论(0) 推荐(0)
摘要:状压dp入门题因为当前行的状态只和上一行有关所以可以一行一行来做因为m #include#include#define REP(i, a, b) for(int i = (a); i state;inline bool judge(int x) { return !... 阅读全文
posted @ 2018-09-23 17:20 Sugewud 阅读(114) 评论(0) 推荐(0)
摘要:这道题的钥匙只有10个,可以压成二进制这里有有句非常关键的话(k & door[x][y]) == door[x][y]一开始以为只要(k & door[x][y]) ==1就可以了后来发现如果door[x][y]为0的话,这句话就不对了。所以要包含这里没有门的情况所... 阅读全文
posted @ 2018-09-23 14:49 Sugewud 阅读(140) 评论(0) 推荐(0)
摘要:看到这道题n只有16,就可以想到状压dp每个人只有经过或者没经过,那就用1表示经过,0表示没经过但是不是当前在谁那里,所以再加一维来记录所以f[state][i]表示在物品在i,当前的状态是state情况下的最小总代价有几个细节要注意 (1)刷表法。要提前初始化为-1... 阅读全文
posted @ 2018-09-23 13:58 Sugewud 阅读(146) 评论(0) 推荐(0)
摘要:这道题正好复习了二项式定理所以答案就是a^n * b^m * c(n, k)然后注意一些细节我一开始写组合数只写一行的组合数即c[0] = 1; c[i] = c[i-1] * (n - i + 1) / i但是因为要去模,同时式子里面有除法,所以不能用这种方式必须从... 阅读全文
posted @ 2018-09-22 14:19 Sugewud 阅读(143) 评论(0) 推荐(0)
摘要:一开始只保留最后一位,交上去29#include#include#include#define REP(i, a, b) for(int i = (a); i #include#include#define REP(i, a, b) for(int i = (a); ... 阅读全文
posted @ 2018-09-22 10:26 Sugewud 阅读(133) 评论(0) 推荐(0)
摘要:这道题其实不难,但是我想复杂了我想的是把每个数质因数分解,然后每次就枚举每个质因数来求最小公倍数。然后想了想这样复杂度将会非常的大,肯定超时然后看了题解发现不需要质因数分解,直接存因数的个数就好了c[i]表示i这个因数出现的次数。然后因为当k越小的时候答案越大(严格来... 阅读全文
posted @ 2018-09-22 09:52 Sugewud 阅读(153) 评论(0) 推荐(0)
摘要:这道题直接写了我两个多小时……主要是写高精度的时候还存在着一些小毛病,调了很久在输入这一块卡了很久。然后注意这里用while的形式写,不然会炸最后即使我已经是用的万进制了,但是交上去还是有两个点超时然后就开始漫长的改进,一直过不了那两个点。然后突然发现,貌似这道题没有... 阅读全文
posted @ 2018-09-21 23:32 Sugewud 阅读(177) 评论(0) 推荐(0)
摘要:非常棒的总结 模板题洛谷 P3374 【模板】树状数组 1单点修改+区间查询#include#include#define REP(i, a, b) for(register int i = (a); i #include#define REP(i, a, b) fo... 阅读全文
posted @ 2018-09-21 21:28 Sugewud 阅读(114) 评论(0) 推荐(0)
摘要:这道题实际上是考二进制很容易看出杯子水量一定是2的i次方所以n杯水最后剩下的水一定是n用二进制表示中1的个数所以就枚举n来求什么时候1的个数小于k那么这里有个优化,不然会超时因为每次加的目的是要让1的个数变少,也就是要进位所以每次加上的是lowbit(n)#inclu... 阅读全文
posted @ 2018-09-20 18:52 Sugewud 阅读(164) 评论(0) 推荐(0)
摘要:常用操作最右一位为第0位,从右到左依次为 0, 1, 2, 3…… 取出n的第k位 (n >> k) & 1取出n的第0~k-1位 n & ((1 > j) & 1)... 阅读全文
posted @ 2018-09-20 17:21 Sugewud 阅读(376) 评论(0) 推荐(0)
摘要:这道题需要对排列有深刻的理解和认识给出逆序对的个数,求改逆序对个数的字典序最小的排列那么既然是最小,那么一开始一段肯定是升序,一直到某个数后才开始改变即1 2 3…… n-1 n a b c d……类似这样那么我们要求出这个n在哪里要字典序最小,就需要1到n这一段最长... 阅读全文
posted @ 2018-09-18 18:35 Sugewud 阅读(202) 评论(0) 推荐(0)
摘要:设答案为d则这k个数是d, 2d, 3d, 4d……kd有 kd #define REP(i, a, b) for(int i = (a); i < (b); i++)#define _for(i, a, b) for(int i = (a); i <= (b); i... 阅读全文
posted @ 2018-09-18 16:51 Sugewud 阅读(115) 评论(0) 推荐(0)
摘要:水题水题#include#include#include#define _for(i, a, b) for(int i = (a); i prime;int ans[MAXN];void get_prime(){ memset(is_prime, true, ... 阅读全文
posted @ 2018-09-17 16:39 Sugewud 阅读(99) 评论(0) 推荐(0)
摘要:有两种做法一种是gcd与lcm相乘后就是两个数的乘积,枚举第一个数,算出第二数,看最大公约数是不是题目给的。第二种就lcm/gcd的答案为两个互质的数相乘。然后就枚举有多少组互质的数相乘等于lcm / gcd就ok了然后又小优化,可以只枚举到根号,然后结果乘以2就行了... 阅读全文
posted @ 2018-09-17 16:30 Sugewud 阅读(141) 评论(0) 推荐(0)
摘要:维护一个滑动窗口即可注意不能有m到m的区间,因为区间长度要大于1#include#define _for(i, a, b) for(int i = (a); i m) while(sum > m) sum -= st, st++; if(sum == m) pri... 阅读全文
posted @ 2018-09-17 16:16 Sugewud 阅读(155) 评论(0) 推荐(0)
摘要:和平常的转化差不多加多一步如果余数 #define _for(i, a, b) for(int i = (a); i <= (b); i++)using namespace std;void cal(int n, int m){ if(n == 0) return; ... 阅读全文
posted @ 2018-09-17 15:54 Sugewud 阅读(330) 评论(0) 推荐(0)
摘要:怎么会有这么水的省选题一定是个签到题。好歹它也是个省选题,独立做出要纪念一下很容易发现在1~n中,i的因子数是n / i那就枚举每一个i然后加起来就OK了#include#define _for(i, a, b) for(int i = (a); i #define ... 阅读全文
posted @ 2018-09-17 15:09 Sugewud 阅读(118) 评论(0) 推荐(0)
摘要:这道题太精彩了!我一开始想直接一波暴力算,然后叫上去只有50分,50分超时然后我改成万位制提高运算效率,还是只有50分然后我丧心病狂开long long用10的10次方作为一位,也就是100亿进制去做,然后交上去多过了一个点,60分 附上丧心病狂的代码#include... 阅读全文
posted @ 2018-09-17 14:51 Sugewud 阅读(261) 评论(0) 推荐(0)
摘要:直接调用next_permutation即可,向前的话可以调用prev_permutation#include#include#include#define REP(i, a, b) for(int i = (a); i #include#include#define... 阅读全文
posted @ 2018-09-17 11:23 Sugewud 阅读(358) 评论(0) 推荐(0)
摘要:中国剩余定理就是同余方程组除数为质数的特殊情况我直接用同余方程组解了。记得exgcd后x要更新还有先更新b1再更新m1,顺序不能错!!(不然会影响到b1的更新)#include#include#define REP(i, a, b) for(int i = (a); ... 阅读全文
posted @ 2018-09-17 10:43 Sugewud 阅读(109) 评论(0) 推荐(0)
摘要:题目中对卡特兰数的总结很不错以下copy自题目 Catalan数列:1,1,2,5,14,42,(前面几个要背)即 h(0)=1,h(1)=1,h(2)=2,h(3)=5...公式:h(n)=C(n,2n)/(n+1) 注:C(3,5)表示组合数5个数选3个的方... 阅读全文
posted @ 2018-09-17 10:08 Sugewud 阅读(194) 评论(0) 推荐(0)
摘要:(x, y)被看到仅当x与y互质由此联想到欧拉函数x=y是1个点,然后把正方形分成两半,一边是φ(n)所以答案是2*∑φ(n)+1#include#include#define REP(i, a, b) for(int i = (a); i < (b); i++) #... 阅读全文
posted @ 2018-09-16 15:13 Sugewud 阅读(210) 评论(0) 推荐(0)
摘要:这道题不知道这个定理很难做出来。除非暴力找规律。我原本找的时候出了问题暴力找出的从13及以上的答案就有问题了因为13的12次方会溢出那么该怎么做?快速幂派上用场。把前几个素数的答案找出来。然后因为原根的一个条件是与p互质,所以可以把欧拉函数的值求出来尝试一下打印出来,... 阅读全文
posted @ 2018-09-16 12:15 Sugewud 阅读(163) 评论(0) 推荐(0)
摘要:直接套模板,这道题貌似单独求还快一些解法一#include#include#define REP(i, a, b) for(int i = (a); i #include#define REP(i, a, b) for(int i = (a); i 1) ret =... 阅读全文
posted @ 2018-09-16 11:16 Sugewud 阅读(113) 评论(0) 推荐(0)
摘要:第一步,和同余方程一样,转化一下 两式相减得这就转化为了求不定方程,用exgcd求出x,要化成最小正整数解,避免溢出然后可以求出P出来。这个时候要把前两个式子转化成一个式子设求出来的是P’则有 这个就转化成了新的m1和b1然后就一直求下去即可最终b1就是答案#incl... 阅读全文
posted @ 2018-09-16 10:51 Sugewud 阅读(154) 评论(0) 推荐(0)
摘要:求x的最小正整数解,使得ax=b(mod m)那么显然ax - b = m * yax - my = b那么就套入Ax+By = K的不定方程中,然后用exgcd求解即可但这道题求最大正整数解,对于一组解,有这样一个推论x = x0 +k*(b/gcd(a,b)) y... 阅读全文
posted @ 2018-09-16 10:13 Sugewud 阅读(136) 评论(0) 推荐(0)
摘要:注意这道题开得非常大,有2*1e7自己可以养成一种习惯,如果数据是很容易的话,可以自己手动输入极限数据来测试自己的程序#include#include#include#include#define REP(i, a, b) for(int i = (a); i pr... 阅读全文
posted @ 2018-09-15 16:43 Sugewud 阅读(115) 评论(0) 推荐(0)
摘要:(1)开long long,不然中间结果会溢出(2)注意一开始的初始化,保险一点。#include#include#include#define REP(i, a, b) for(int i = (a); i >= 1; a = a * a % p; } retur... 阅读全文
posted @ 2018-09-15 16:13 Sugewud 阅读(116) 评论(0) 推荐(0)
摘要:模板题注意exgcd函数要稍微记一下#include#include#include#define REP(i, a, b) for(int i = (a); i < (b); i++)#define _for(i, a, b) for(int i = (a); i ... 阅读全文
posted @ 2018-09-15 15:47 Sugewud 阅读(128) 评论(0) 推荐(0)
摘要:这道题主要是状态很难想到首先可以看出每行每列不能超过2个棋子也就是说有0, 1, 2三种状态所以可以一行一行来处理那就用表示前i行,有列放了一个棋子,有列放了2个棋子的方案数放了0个棋子的列数是那么这个时候状态转移方程就非常好写了。对于当前这一行可以不放,放一个,放两... 阅读全文
posted @ 2018-09-15 12:21 Sugewud 阅读(137) 评论(0) 推荐(0)
摘要:设为第i秒获得的最大值表示从当前世界是j,从pos走k步到当前点i的最大价值注意这里的sum可以利用前面的值逐步累加。我开始做的时候没有想到这一点单独求,然后就超时了。同时要注意循环的循序问题。#include#include#include#include#defi... 阅读全文
posted @ 2018-09-15 11:13 Sugewud 阅读(129) 评论(0) 推荐(0)
摘要:首先吃饭时间长的排在前面更优,所以先排个序然后问题就是怎么分配这一波人的问题刻画状态有人和时间,然后分两队所以用表示前i个人,第一队用j时间,第二队用k时间的最小吃饭时间那么因为这么开数组会炸,所以我们要降一维。前i个人的等待总时间是固定的,所以第二队的时间可以推出来... 阅读全文
posted @ 2018-09-14 22:39 Sugewud 阅读(130) 评论(0) 推荐(0)
摘要:void read(int& x) //isdigit头文件 cctype{ int f = 1; x = 0; char ch = getchar(); while(!isdigit(ch)) { if(ch == '-1') f = -1; ch = getch... 阅读全文
posted @ 2018-09-14 21:04 Sugewud 阅读(112) 评论(0) 推荐(0)
摘要:这道题用到了悬线法,非常牛逼,可以看这个论文。https://blog.csdn.net/twtsa/article/details/8120269#include#include#include#include#define REP(i, a, b) for(int... 阅读全文
posted @ 2018-09-13 18:51 Sugewud 阅读(129) 评论(0) 推荐(0)
摘要:一看到这道题就知道是树形dp之前做过类似的题,只不过保护的范围是1所以简单很多。这道题保护的范围是2,就复杂了很多。我就开始列状态,然后发现竟然有5种然后我就开始列方程。但是我考虑的时候是用一条链去思考的。显然应该要用深度为3的完全二叉树去思考。所以我写到一半发现自己... 阅读全文
posted @ 2018-09-12 17:25 Sugewud 阅读(170) 评论(0) 推荐(0)
摘要:这一道题我一直在想时间该怎么算。看题解发现有个隐藏的贪心。路径一定是左右扩展的,左右端点最多加+1(我竟然没发现!!)这个性质非常重要!!因此这道题用区间dpf[i][j]表示关完i到j的路灯的消耗。那么因为要算走的路程,那么还有一维表示当前人在左端点还是右端点。然后... 阅读全文
posted @ 2018-09-11 17:20 Sugewud 阅读(181) 评论(0) 推荐(0)
摘要:这道题和多米诺骨牌那道题很像,都是涉及到差值的问题。这道题是二维的,同时要取模.这种题,因为当前的决策有后效性,会影响到差值,所以直接把差值作为维度,然后计算答案的时候把差值为0的加起来就行了。这里有两个人,所以可以多设一维第一人还是第二人,来回更新。然后取模的时候记... 阅读全文
posted @ 2018-09-10 18:22 Sugewud 阅读(140) 评论(0) 推荐(0)
摘要:自己一点一点敲出来的,累!!#include#include#include#define REP(i, a, b) for(int i = (a); i b.len; for(int i = a.len; i >= 1; i--) if(a.s... 阅读全文
posted @ 2018-09-09 16:52 Sugewud 阅读(116) 评论(0) 推荐(0)
摘要:这道题大部分时间都在弄高精度……还是先讲讲dp吧这道题是一个区间dp,不过我还是第一次遇到这种类型的区间dpf[i][j]表示取了数之后剩下i到j这个区间的最优值注意这里是取了i之前和j之后的,i到j的数并没有取。那么这个状态要不是取了第i-1个数转移而来,要不是取了... 阅读全文
posted @ 2018-09-09 15:57 Sugewud 阅读(223) 评论(0) 推荐(0)
摘要:一看完这道题就知道是划分型dp有两个点要注意(1)怎么预处理子串。 表示以i为开头,结尾在j之前(含),有没有子串,有就1,没有就0(2)dp的过程这种分成k组最优的题目已经高度模板化了,我总结一下吧//f[i][j]表示把前j个数分成i组的最优价值 memset(f... 阅读全文
posted @ 2018-09-09 09:54 Sugewud 阅读(162) 评论(0) 推荐(0)
摘要:dp非常好想, f[i] = min(f[i-len] + stone[i]) s #include#include#define REP(i, a, b) for(int i = (a); i #include#include#define REP(i, a, b)... 阅读全文
posted @ 2018-09-08 15:39 Sugewud 阅读(189) 评论(0) 推荐(0)
摘要:一开始直接用01背包后来发现这个物品和位置有关。也就是价值不是固定的后来看了题解看了卡片最多就4所以这是一个四维费用的背包,每一维是卡片的数量价值就是当前的位置的价值。但是与常规的背包还是有点不同代码中没有枚举物品这一项实际上循环里面的四个卡片的判断语句就是枚举四个物... 阅读全文
posted @ 2018-09-08 14:38 Sugewud 阅读(167) 评论(0) 推荐(0)
摘要:和最大正方形很像。记得对角线有两条还有2500不要开成3000,否则会mle#include#include#include#define REP(i, a, b) for(int i = (a); i = 1; j--) { if(a[i][j]) { ... 阅读全文
posted @ 2018-09-08 13:59 Sugewud 阅读(110) 评论(0) 推荐(0)
摘要:矩阵旋转在做题的时候会遇到我百度一下想找到已经总结过的模板没找到所以我干脆就自己写了 #include#define _for(i, a, b) for(int i = (a); i <= (b); i++)using namespace std;const int ... 阅读全文
posted @ 2018-09-08 12:09 Sugewud 阅读(189) 评论(0) 推荐(0)
摘要:加多一维就行了#include#include#include#define REP(i, a, b) for(int i = (a); i = w1[i]; j--) for(int k = m; k >= w2[i]; k--) f[j][k] = ma... 阅读全文
posted @ 2018-09-08 11:08 Sugewud 阅读(133) 评论(0) 推荐(0)
摘要:一看到这道题就是01背包但是我注意到价值和当前的时间有关。没有想太多,直接写,0分然后发现输入方式不对……改了之后只有25分我知道wa是因为时间会影响价值,但不知道怎么做。后来看了题解,发现我对01背包理解不够透彻普通01背包做下来放入物品的顺序是1到n的因为这个时候... 阅读全文
posted @ 2018-09-08 11:00 Sugewud 阅读(152) 评论(0) 推荐(0)
摘要:用f[i][j]表示以(i,j)为右下角的最长正方形的边长则 f[i][j] = min(f[i-1][j], min(f[i][j-1], f[i-1][j-1])) + 1;#include#include#define REP(i, a, b) for(int ... 阅读全文
posted @ 2018-09-08 09:51 Sugewud 阅读(132) 评论(0) 推荐(0)
摘要:这道题题好像写麻烦了因为道路从上到下和从下到上是一样的所以可以从上推到下,然后按照水牛开始位置输出结果。我是直接模拟水牛的移动,代码多了些。然后记住memset是必要的,不要省略,可能有负的情况#include#include#include#define REP(i... 阅读全文
posted @ 2018-09-07 21:22 Sugewud 阅读(138) 评论(0) 推荐(0)
摘要:这道题很有收获。我自己想的时候有想到这是一个背包,但是写的实现非常麻烦,还是错的。我想的是在背包的过程中尽量靠近0,但是这样显然有后效性而且我思考背包的方式不对。要考虑当前物品有哪几种可能,然后比如这道题就是交换或者不交换。先用二维的思考方式,滚动数组只是后面的优化。... 阅读全文
posted @ 2018-09-07 20:48 Sugewud 阅读(109) 评论(0) 推荐(0)
摘要:这道题是之前石子合并的加强板https://blog.csdn.net/qq_34416123/article/details/81913341不同在于是一个环处理方法就是把数组 乘以2,枚举起点转化成链。以后这种环的问题应该都可以这样来转化。数组空间不要忘了乘以2然... 阅读全文
posted @ 2018-09-05 18:47 Sugewud 阅读(104) 评论(0) 推荐(0)
摘要:这道题可以用分组背包来做。但是分组有两种方式一种是把主件,主件+附件1,主件+附件2分成一组组内只能选一个物品 一种是建一颗树,用树形dp的方式去做第二种更通用,就算物品的依赖关系是森林都可以做而第一种只限于这道题,因为只有一层关系,所以有特殊解目前只写了第一种,后面... 阅读全文
posted @ 2018-09-02 14:52 Sugewud 阅读(134) 评论(0) 推荐(0)
摘要:一波树上背包秒杀……#include#include#include#include#define REP(i, a, b) for(int i = (a); i g[MAXN];void dfs(int u, int fa){ REP(i, 0, g[u].siz... 阅读全文
posted @ 2018-09-02 11:05 Sugewud 阅读(178) 评论(0) 推荐(0)
摘要:https://blog.csdn.net/u011500062/article/details/44628441 阅读全文
posted @ 2018-09-02 10:55 Sugewud 阅读(149) 评论(0) 推荐(0)
摘要:根据最近做的几道树形dp题总结一下规律。(从这篇往前到洛谷 P1352 )这几道题都是在一颗树上,然后要让整棵树的节点或边满足一种状态。然后点可以影响到相邻点的这种状态然后求最小次数那么要从两个维度来设计状态第一个维度(1)以i为根的树的所有节点都满足这种状态(2)以... 阅读全文
posted @ 2018-09-02 10:41 Sugewud 阅读(241) 评论(0) 推荐(0)
摘要:这道题和上一道题非常相似这道题是看边,上一道是看点。但是状态定义不同看边的话没有不放不安全这种状态因为当前结点的父亲无法让这颗子树没有看到的边看到所以这种状态不存在而上一道题存在不放不安全这种状态因为当前结点的父亲可以让这个不安全的结点变得安全边和点是两种不同的思考方... 阅读全文
posted @ 2018-09-01 16:52 Sugewud 阅读(161) 评论(0) 推荐(0)
摘要:这道题的难点在于状态怎么设计这道题要求全部都是安全的,所以我们做的时候自底向上每一个结点都要是安全的结合前一题当前结点选和不选,我们可以分出四种情况出来选 安全选 不安全不选 安全不选 不安全显然选 不安全是不可能的,那么就去掉所以我们就可以设计状态为表示i放人且安全... 阅读全文
posted @ 2018-09-01 16:28 Sugewud 阅读(248) 评论(0) 推荐(0)
摘要:一颗树,选取不相邻的点,求最大点权值因为当前结点选或不选后后效性,所以我们加一唯来取消后效性表示以i为根的树且i不选的最大价值表示以i为根的树且i选的最大价值显然有#include#include#include#define REP(i, a, b) for(int... 阅读全文
posted @ 2018-09-01 14:23 Sugewud 阅读(198) 评论(0) 推荐(0)
摘要:从这篇博客往前到二叉苹果树都可以用分组背包做这依赖性的问题,都可以用于这道题类似的方法来做表示以i为根的树中取j个节点所能得的最大价值那么每一个子树可以看成一个组,每个组里面取一个节点,两个节点,三个节点就是三个不同的物品对于这道题,有我们来类比一下普通分组背包的转移... 阅读全文
posted @ 2018-09-01 11:51 Sugewud 阅读(159) 评论(0) 推荐(0)
摘要:最近在做树形dp,遇到几道多叉树的问题都可以用树上背包的做法来做。还不是很懂,据说是分组背包,所以我就找了一道分组背包的题来打打基础摘自《背包九讲》 这里循环顺序要注意先枚举重量后枚举物品可以使得只取一个物品然后最外层就是组#include#include#inclu... 阅读全文
posted @ 2018-09-01 11:25 Sugewud 阅读(159) 评论(0) 推荐(0)