博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1561 树形DP
阅读量:4610 次
发布时间:2019-06-09

本文共 1365 字,大约阅读时间需要 4 分钟。

题意就不说了,中文题都懂的。这是我的第一道树形DP,还是看了别人的解题报告才做的。

View Code
1 #include 
2 #include
3 #define MAX(a,b) (a)>(b)?(a):(b) 4 #define N 205 5 struct node { 6 int from,to,next; 7 }edge[N]; 8 int dp[N][N],visit[N],val[N],head[N],n,m,tol; 9 void add(int a,int b)10 {11 edge[tol].from = a;12 edge[tol].to = b;13 edge[tol].next = head[a];14 head[a] = tol++;15 }16 void dfs(int root)17 {18 int i,j,k,u;19 visit[root] = 1;20 for(i = head[root];i != -1;i = edge[i].next)21 {22 u = edge[i].to;23 if(!visit[u])24 {25 dfs(u);26 for(k = m+1;k >= 2; --k)27 for(j = 1;j < k; ++j)28 dp[root][k] = MAX(dp[root][k],dp[root][k-j]+dp[u][j]);29 }30 }31 }32 int main()33 {34 int i,a,b;35 while(~scanf("%d %d",&n,&m) && n && m)36 {37 tol = 0;38 memset(head,-1,sizeof(head));39 memset(visit,0,sizeof(visit));40 memset(dp,0,sizeof(dp));41 for(i = 1;i <= n; ++i)42 {43 scanf("%d %d",&a,&b);44 val[i] = b;45 add(a,i);46 dp[i][1] = b;47 }48 val[0] = 0;49 dfs(0);50 printf("%d\n",dp[0][m+1]);51 }52 return 0;53 }

转载于:https://www.cnblogs.com/zhangteng512/archive/2012/06/04/2535304.html

你可能感兴趣的文章
Python 通过lxml 解析html页面自动组合xpath实例
查看>>
Linux0.11内核之旅3——main.c(1)
查看>>
bWAPP练习--injection篇之HTML Injection - Reflected (POST)
查看>>
图实践经典问题一览
查看>>
Java将List<T>集合组装成树(Tree)树结构组装
查看>>
javaEE 之JSon
查看>>
Python多进程操作同一个文件,文件锁问题
查看>>
BOM——检测浏览器
查看>>
JavaScript 进阶(一)JS的"多线程"
查看>>
zabbix3.2 install
查看>>
Hanoi塔问题——递归
查看>>
c++11之函数式编程实例
查看>>
BZOJ 3038 线段树
查看>>
两个数据库中相同表的Update操作
查看>>
jQuery
查看>>
[BZOJ 1552] 排序机械臂
查看>>
Java 静态代理与动态代理
查看>>
高并发的解决方案
查看>>
手机web HTML头信息解释
查看>>
ActiveMQ Part 3 : 常用配置
查看>>