博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2486( 树形dp)
阅读量:6323 次
发布时间:2019-06-22

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

题目链接:

思路:经典的树形dp,想了好久的状态转移。dp[i][j][0]表示从i出发走了j步最后没有回到i,dp[i][j][1]表示从i出发走了j步最后回到i。于是我们把所有到情况归结为3种:

1、从u(v是其中一颗子树)出发,走了j步,最后停在了v,则有dp[u][j+1][0]=max(dp[u][j+1][0],dp[u][j-k][1]+dp[v][k][0]);(从u->v多走了1步).

2、从u出发,走了j步,最后停在了u的另一棵子树上,则有dp[u][j+2][0]=max(dp[u][j+2][0],dp[u][j-k][0]+dp[v][k][1])(从u->v,,v->u多走了2步).

3、从u出发,走了j步,最后回到u,则有dp[u][j+2][1]=max(dp[u][j+2][1],dp[u][j-k][1]+dp[v][k][1])(从u->v,,v->u多走了2步).

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 #define MAXN 222 8 9 int n,m,val[MAXN];10 vector
>g;11 int dp[MAXN][MAXN][2];12 13 void dfs(int u,int father)14 {15 for(int i=0; i<=m; i++)dp[u][i][0]=dp[u][i][1]=val[u];16 for(int i=0; i
=0; j--) {21 for(int k=0; k<=j; k++) {22 dp[u][j+1][0]=max(dp[u][j+1][0],dp[u][j-k][1]+dp[v][k][0]);23 dp[u][j+2][0]=max(dp[u][j+2][0],dp[u][j-k][0]+dp[v][k][1]);24 dp[u][j+2][1]=max(dp[u][j+2][1],dp[u][j-k][1]+dp[v][k][1]);25 }26 }27 }28 }29 30 int main()31 {32 int _case,u,v;33 while(~scanf("%d%d",&n,&m)) {34 g.clear();35 g.resize(n+2);36 for(int i=1; i<=n; i++)scanf("%d",&val[i]);37 for(int i=1; i
View Code

 

转载地址:http://rnlaa.baihongyu.com/

你可能感兴趣的文章
Vue2 第四天学习(Vue的生命周期)
查看>>
1长数组使用
查看>>
GC是什么? 为什么要有GC?
查看>>
数字积分
查看>>
redis 3.0.1 在CentOS上的安装
查看>>
silverlight:如何在后端代码中控制Behaviors
查看>>
TCP/IP三次握手和HTTP过程
查看>>
JQuery EasyUi之界面设计——母版页以及Ajax的通用处理(三)
查看>>
童年记忆
查看>>
Selenium Python bindings 文档一
查看>>
directX的16位和24位的色彩模式
查看>>
WINDOWS 8
查看>>
ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[下篇]
查看>>
poj3231
查看>>
spring(10)
查看>>
Ubuntu 12.04 LTS 及ubuntu14.10 -- NFS安装
查看>>
hdu 5063 Operation the Sequence(Bestcoder Round #13)
查看>>
django orm多条件查询及except处理不存在记录的样码
查看>>
8.3折抢购最欢迎的Mac清理工具CleanMyMac3
查看>>
第十五章 springboot + pojo默认值设置
查看>>