2013年8月18日

hdu1561 The more, The Better 树形DP+分组背包

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561思路:典型的树形背包题目:定义dp[i][j]表示以i为根节点,攻打j个城堡的获得的财宝的最优值,那么dp[i][j]=max(dp[i][j],dp[son][k]+dp[i][j-k]) 其中son为i的儿子然后从叶子节点往上进行背包即可刚接触的同学会有疑问:就是不知道怎样将题目中的数据建为一个树,其实很简单,只要把0作为根结点即可 0节点的value初始化为0然后dp[0][m+1]即为求得的答案,是不是很简单啊。。。。注意初始化。代码如下: 1 #include 2 #include 阅读全文

posted @ 2013-08-18 18:20 GyyZyp 阅读(151) 评论(0) 推荐(0) 编辑

hdu1520 Anniversary party 简单树形DP

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520思路:树形DP的入门题定义dp[root][1]表示以root为根节点的子树,且root本身参加party的最优值,那么dp[root][1]+=Σdp[son][0]+happy[root];dp[root][0]表示以root为跟节点且root本身没有参加的最优值,那么dp[root][0]+=max(dp[son][0],dp[son][1]);如果不理解,可以参考我对hdu1054的解释。代码如下: 1 #include 2 #include 3 #include 4 #include 阅读全文

posted @ 2013-08-18 16:58 GyyZyp 阅读(137) 评论(0) 推荐(0) 编辑

hdu1054 Strategic Game 树形DP

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054思路:树形DP,用二分匹配也能解决定义dp[root][1],表示以root 为根结点的子树且在root放一个士兵的最优值,那么因为在root已经有士兵了,所以对其孩子来说可以放也可以不放那么dp[root][1]+=min(dp[son][1],dp[son][0]);dp[root][0]表示以root为根结点的子树且在root没有放士兵的最优值,那么因为在root没有士兵,所以在其孩子节点一定要放一个士兵,才能保证与其相连的边被观察到,那么dp[root][0]+=dp[son][1]; 阅读全文

posted @ 2013-08-18 15:42 GyyZyp 阅读(172) 评论(0) 推荐(0) 编辑

hdu1011 Starship Troopers 树形DP

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011思路:很明显的树形背包定义dp[root][m]表示以root为根,派m个士兵的最优解,那么dp[root][m]=max(dp[root][m],dp[root][k]+dp[son][j]) k+j 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAX 110 7 int n,m; 8 int dp[MAX][MAX]; 9 int tol;10 class node11 {12 public:13... 阅读全文

posted @ 2013-08-18 14:37 GyyZyp 阅读(188) 评论(0) 推荐(0) 编辑

导航