![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划:树形DP
文章平均质量分 56
skajre
这个作者很懒,什么都没留下…
展开
-
树的最大独立集
#include #include #include #include #include using namespace std; const int maxn=100+5; int n,l[maxn],p[maxn],f[maxn],sumc[maxn],sums[maxn],maxl; vector G[maxn]; void readtree() { int u,v; sca原创 2016-07-12 10:19:39 · 308 阅读 · 0 评论 -
POJ 1655 Balancing Act
只要一次无根树转有根树就可以计算了,一开始每个点都转,发现那就不是动态规划,是枚举了。。。。#include #include #include #include #include using namespace std; const int maxn=20000+100; vector G[maxn]; int son[maxn],f[maxn],ans,flag,n; void dfs(int原创 2016-07-13 09:52:34 · 176 阅读 · 0 评论 -
POJ 3107 Godfather
head保存的是以u为起点出现的最后一条边,next表示之前以u为起点的边,一只搜索回去,知道为-1。 #include #include #include #include using namespace std; const int maxn=50000+100; int n,len,ans,cnt=0,p[maxn],son[maxn],head[maxn],vis[maxn]; stru原创 2016-07-13 15:40:03 · 167 阅读 · 0 评论 -
POJ 2631 Roads in the North
#include #include #include #include using namespace std; const int maxn=10000+100; int len,ans,cnt=0,p[maxn],son[maxn],head[maxn],vis[maxn],weigh[maxn][maxn]; struct node{ int u,v,next; }node[2*ma原创 2016-07-13 16:25:46 · 159 阅读 · 0 评论 -
uva 12186 Another Crisis
c=(k*t-1)/100+1如果不减1当10 10时是2,如果不加一不减一的话那么3 50是1而不是2. #include #include #include #include #include using namespace std; const int maxn=100000+10; vector son[maxn]; int n,t,c,u; int dp(int u) { if原创 2016-07-13 20:23:50 · 183 阅读 · 0 评论 -
UVA 11468 Substring(AC自动机+树上的动态规划)
这题pro数组开小了,一直TLE。 就是简单的记忆化搜索,走不是单词节点的点就可以,记得标出危险节点。#include #include #include #include #include using namespace std; const int maxnode=500; int idx[256]; int k,n,L; struct DFA{ int ch[maxnode][64原创 2016-10-26 10:31:03 · 238 阅读 · 0 评论 -
UVA 1292 Strategic game(树形dp)
这题一开始定义状态定义错了,我以为只要父节点放灯了,子节点不就不用放了,事实上子节点需要两种状态都枚举过,就是放与不放都需要枚举,如果父节点不放的话,那么子节点必须放。#include #include #include #include #include using namespace std; #define rep(i,a,b) for(int i=(a);i<(b);i++) #defin原创 2016-10-16 11:15:29 · 202 阅读 · 0 评论 -
UVA 1407 Caves(树形dp)
这题定义状态f[i][j][0]和f[i][j][1]。 f[i][j][0]表示遍历以i为根节点的子树的j个节点并且不回到节点i,那么状态方程为f[i][j][0]=min(f[i][j][0],min(f[i][j-k][1]+f[v][k][0]+w,f[i][j-k][0]+f[v][k][1]+2*w); f[i][j][1]表示遍历以i为根节点的子树的j个节点并且回到节点i,那么状原创 2016-10-18 16:48:34 · 241 阅读 · 0 评论