摘要:
dp一直弱死了,树型dp很多基本的题都不会,最近在刷树型dp的题,把关于树的最长路的思想总结一下:树的直径:树中距离最远的两点间的距离。下面说几道题:hdu 2196:对于树上(双向边)的每一个节点求出与其距离最远的点的距离。这个主要用的思想是两次dfs:一次dfs将无向图转化为有跟树(所以一开是一定要是建双向边,不然很可能wa或者tle,记录过程中可以开数组记入父亲节点,也可以在dfs递推过程中以栈的形式记录)求出每个跟节点到其所有的叶子节点的最远距离f[i]和g[i]。再一次dfs求出能够由父亲节点转化得到的最大距离h[i],求h[i]的过程中就有可能用到f[i]和g[i]了,因为如果i节 阅读全文
摘要:
一道状态压缩DP,比赛时没时间仔细想了,赛后想了想转移那部分也有点糊里糊涂的,后来请教了一下yk同学,才肯定了一下那个状态表示,后来自己一边探索,一边敲码,一边调试,确认无误后得到1A。看到题很自然的想到从低位开始往高位处理,基本处理加的思路是:在本位上只有可能+1(由1变成0,由0变成1)或者+2(由0变成0,由1变成1,但是存在进位),基本的情况是本位只可能主动+1,如果+2则可能是后一位进位过来了的。基本状态是dp[i][j]:处理玩了第i位(第0~i位异或已经全为0),第i位有j堆需要想第i+1位进位。状态转移:由第i+1位本身的值,加上第i位至第i+1位的进位,会得到一串新的值,但是 阅读全文