一棵树一共有2*(n-1)度,现在的任务就是将这些度分配到n个节点,使这n个节点的权值和最大. 思路:因为这是一棵树,所以每个节点的度数都是大于1的,所以事先给每个节点分配一度,答案 ans=f[1]*n 先将答案赋值 所以接下来研究的就是,将剩下的n-2个度分配 即分别看 分配度数为1到n-2的节点的有几个(因为每个节点已经有一度),然后因为每个节点都加上了权值f[1],所以这时f[2]=f[2]-f[1],以此类推, 看到这里,就是一个完全背包问题:如果还没看出来,详细一点 有1到n-2这些…
题目描述 从前有棵树. 找出K个点A1,A2,…,Ak. 使得∑dis(AiAi+1),(1<=i<=K-1)最小. 输入 第一行两个正整数n,k,表示数的顶点数和需要选出的点个数. 接下来n-l行每行3个非负整数x,y,z,表示从存在一条从x到y权值为z的边. I<=k<=n. l<x,y<=n 1<=z<=10^5 n <= 3000 输出 一行一个整数,表示最小的距离和. 样例输入 10 7 1 2 35129 2 3 42976 3 4 244…
Apple Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7789   Accepted: 2606 Description Wshxzt is a lovely girl. She likes apple very much. One day HX takes her to an apple tree. There are N nodes in the tree. Each node has an amoun…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题意: 给你度为1 ~ n - 1节点的权值,让你构造一棵树,使其权值和最大. 思路: 一棵树上每个节点的度至少为1,且度的和为2*n - 2.那么我们先给这些节点的度都-1,剩下的节点度为n - 2.此时我们发现,任意分配剩下的这些度给节点,都可以形成一棵树.这就变成了一个完全背包题,容量为n-2.注意dp要初始化为-inf.思路确实巧妙. #include <iostream> #inc…
题目链接:https://cn.vjudge.net/problem/HDU-5534 题意 放学路上看到n个节点,突然想把这几个节点连成一颗树. 树上每个节点有一个清凉度,清凉度是一个关于节点度的函数. 问能够组成树的最大清凉度是多少. 思路 看到题目瞬间考虑一共有n-1条边,各节点的度之和是2n-2. 那么猜测每个节点上分配度数是一个完全背包. 画了两个例子结果是没问题. 注意可能有的节点将不被分配度数,所以要预分配一个度 dp[0]=n*val[1] 这样做的原理是每个节点必然可以分配到一…
#include <iostream> #include <cstring> #include <deque> using namespace std; #define SIZE 230 #define BACK 1 #define AWAY 0 int DP[SIZE][SIZE][2]; bool visits[SIZE]; int vals[SIZE]; deque< int > tree[SIZE]; int num, steps; void dfs…
题目:一棵树,每个结点上都有一些苹果,且相邻两个结点间的距离为1.一个人从根节点(编号为1)开始走,一共可以走k步,问最多可以吃多少苹果. 思路:这里给出数组的定义: dp[0][x][j] 为从结点x开始走,一共走j步,且j步之后又回到x点时最多能吃到的苹果数. dp[1][x][j] 为从结点x开始走,一共走j步最多能吃到的苹果数(不必再回到x点).之所以要定义上面的一种状态是因为在求第二种状态时需要用到. 下面介绍递推公式. 对于结点x,假设它目前要访问的孩子为y,则1...(y-1)已经…
题目给了512MB的空间....用dp[k][i]代表以k为起点...往下面走(走直的不打岔)i步能有多少方案....在更新dp[k][i]过程中同时统计答案.. Program: #include<iostream> #include<queue> #include<stack> #include<stdio.h> #include<string.h> #include<algorithm> #include<cmath>…
一棵树上有K个黑色节点,剩余节点都为白色,将其划分成K个子树,使得每棵树上都仅仅有1个黑色节点,共同拥有多少种划分方案. 个人感觉这题比較难. 如果dp(i,0..1)代表的是以i为根节点的子树种有0..1个黑色节点的划分方案数. 当节点i为白色时.对于它的每一个孩子的节点处理: 求dp(i, 0)时有: 1,将该节点与孩子节点相连,但要保证孩子节点所在的子树种没有黑色节点: 2,将该节点不与该孩子节点相连.则该孩子节点要保证所在子树种有黑色节点: 即dp(i, 0) = π(dp(j,0 )…
题目链接 Distance in Tree $k <= 500$ 这个条件十分重要. 设$f[i][j]$为以$i$为子树,所有后代中相对深度为$j$的结点个数. 状态转移的时候,一个结点的信息由他的儿子转移过来. 那么一边进行状态转移,一边统计答案即可. #include <bits/stdc++.h> using namespace std; ][], deep[]; vector <]; int n, k, x, y; long long ans; void dfs(int…