andre_joy

导航

2012年10月10日

poj 2486

摘要: 地址:http://poj.org/problem?id=2486题意:有一颗苹果树,每个节点上面有很多苹果,从一个节点到另外一个可以到达的节点花费1步,求k步最多能吃到多少苹果。mark:这是典型的回溯型树状dp。dp[i][j][0]代表以i为根节点的子树最多j步后回到i能吃到的最多的苹果,dp[i][j][1]代表以i为根节点的子树最多j步后不回到i节点最多能吃到的子树。那么状态转移就分三步了。(1)dp[i][j+2][0] = max(dp[i][j+2][0], dp[i][j-k][0]+dp[son][k][0]);(2)dp[i][j+1][1] = max(dp[i][j+ 阅读全文

posted @ 2012-10-10 22:49 andre_joy 阅读(780) 评论(0) 推荐(0)

hdu 4003

摘要: 地址:http://acm.hdu.edu.cn/showproblem.php?pid=4003参见大牛的博客吧http://blog.csdn.net/woshi250hua/article/details/7648099mark:写一点我的总结。 因为该题题目要求的是每个点都必须至少走一次。状态我自己是没想出来,根据大牛的状态。dp[v][0]可以理解为一个机器人跑以v为根节点的分支并回到v点。代码:#include <stdio.h>#include <string.h>#include <stdlib.h>const int N = 10010;s 阅读全文

posted @ 2012-10-10 22:35 andre_joy 阅读(377) 评论(0) 推荐(0)

hdu 1561

摘要: 地址:http://acm.hdu.edu.cn/showproblem.php?pid=1561题意:要攻克一些城堡,有些城堡可以直接攻克,有些必须要先攻克一个指定城堡才能攻克他。每个城堡里面有一些宝物,求攻克m个城堡的最大宝物数。mark:该题用到一个很实用的技巧就是题目给定的是一片森林,那么我们为这些根节点建立一个共同的根节点,那么就变成一棵树了。 常规树形dp解法。dp[i][j]代表第i个节点为根节点的节点个数为j的最大价值。则dp[v][1] = w[v];(v是叶子节点) dp[i][j] = max(dp[i][j], dp[i][k]+dp[son][j-k]);... 阅读全文

posted @ 2012-10-10 22:15 andre_joy 阅读(847) 评论(0) 推荐(0)