摘要:
这里的状态定义的非常的巧妙,d(i, 1)表示以i为根节点且选i的子树的最大独立子集d(i, 0)表示以i为根节点且不选i的子树的最大独立子集d(i, 1) = sum{ d(v, 0) | v是i的儿子}d(i, 0) = sum{ max(d(v, 0), d(v... 阅读全文
摘要:
这道题还是比较简单的,对于当前节点,算出每个儿子需要的人数然后再算出当前节点需要多少个人数,然后排个序加上去就好了。#include#include #include#define REP(i, a, b) for(int i = (a); i son[MAXN];... 阅读全文
摘要:
设置f(i, j)为点i, i + 1 ……j所组成的多边形。那么可以枚举中间点k, 得f(i, j) = min{s(i, j, k), f(i, k), f(k, j) | i #include#include#include#define REP(i, a, b... 阅读全文
摘要:
当前区间f(i, j)分两种情况,一种是s[i]于s[j]符合要求,那么可以转移到f[i + 1][j - 1] 这样答案只会更小或者相等第二种是直接分成两个部分, 即f[i][j] = f[i][k] + f[k + 1][j],这个时候要取min同时要注意第一种情... 阅读全文
摘要:
区间dp,可以以一个区间为状态,f[i][j]是第i个切点到第j个切点的木棍的最小费用那么对于当前这一个区间,枚举切点k,可以得出f[i][j] = min{dp(i, k) + dp(k, j) | i #include#include#define REP(i, ... 阅读全文