hiho 1055 刷油漆 树形dp
一个简单的树上的背包问题。
代码:
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <cmath>
- #include <algorithm>
- #include <string>
- #include <queue>
- #include <stack>
- #include <vector>
- #include <map>
- #include <set>
- #include <functional>
- #include <cctype>
- #include <time.h>
- using namespace std;
- const int INF = <<;
- struct Graph {
- static const int MAXN = ;
- static const int MAXM = MAXN*;
- int head[MAXN];
- int next[MAXM], to[MAXM], use;
- int val[MAXN], size[MAXN];
- int m;
- void init(int n, int m) {
- memset(head, -, sizeof(head));
- use = ;
- this->m = m;
- for (int i = ; i <= n; i++) scanf("%d", &val[i]);
- int u, v;
- for (int i = ; i < n; i++) {
- scanf("%d%d", &u, &v);
- addEdge(u, v);
- addEdge(v, u);
- }
- }
- inline void addEdge(int u, int v) {
- next[use] = head[u];
- to[use] = v;
- head[u] = use++;
- }
- int dp[MAXN][MAXN];
- void dfs(int u, int pre) {
- memset(dp[u], , sizeof(dp[u]));
- size[u] = ;
- for (int p = head[u]; p != -; p = next[p]) {
- int v = to[p];
- if (v==pre) continue;
- dfs(v, u);
- size[u] += size[v];
- }
- dp[u][] = val[u];
- for (int p = head[u]; p != -; p = next[p]) {
- int v = to[p];
- if (v==pre) continue;
- for (int i = size[u]; i > ; i--)
- for (int j = ; j <= size[v]; j++) {
- if (i+j>size[u]) break;
- dp[u][i+j] = max(dp[u][i+j], dp[u][i]+dp[v][j]);
- }
- }
- }
- void solve() {
- int ans = ;
- dfs(, );
- for (int i = ; i <= m; i++)
- ans = max(ans, dp[][i]);
- printf("%d\n", ans);
- }
- }solver;
- int main() {
- #ifdef Phantom01
- freopen("1055.txt", "r", stdin);
- #endif //Phantom01
- int n, m;
- while (scanf("%d%d", &n, &m)!=EOF) {
- solver.init(n, m);
- solver.solve();
- }
- return ;
- }
hiho 1055 刷油漆 树形dp的更多相关文章
- hihoCoder #1055 : 刷油漆 [ 树形dp ]
传送门 结果:Accepted 提交时间:2015-05-11 10:36:08 #1055 : 刷油漆 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到 ...
- HihoCoder 1055 : 刷油漆 树形DP第一题(对象 点)
刷油漆 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了 ...
- hiho #1055 : 刷油漆
上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是处于1..N的范围之内,每根木棍都连接着两个不同的小球,并 ...
- hihoCoder hiho一下 第十二周 #1055 : 刷油漆 (树上DP)
思路: 只能刷部分节点数m,总节点数n.如果m>=n那么就可以全刷了,那就不用任何算法了.如果m<n那么就要有取舍了.用DP思路,记录下每个节点如果获得到1~m个选择所能获得的最大权值.这 ...
- 格子刷油漆(dp)-----------蓝桥备战系列
标题:格子刷油漆 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如图1所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但 ...
- hihoCoder#1055 : 刷油漆 (树形DP+01背包)
题目大意:给一棵带点权的树,现在要从根节点开始选出m个连通的节点,使总权值最大. 题目分析:定义状态dp(u,m)表示在以u为根的子树从根节点开始选出m个点连通的最大总权值,则dp(u,m)=max( ...
- [hihoCoder] #1055 : 刷油漆
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数 ...
- HihoCoder 1055 刷油漆 (树上背包)
题目:https://vjudge.net/contest/323605#problem/A 题意:一棵树,让你选择m个点的一个连通块,使得得到的权值最大 思路:树上背包,我们用一个dp数组,dp[i ...
- HihoCoder第十二周:刷油漆
#1055 : 刷油漆 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球 ...
随机推荐
- Java文件(io)编程——文件字节流的使用
案例1: 演示FileInputStream类的使用(用FileInputStream的对象把文件读入到内存) 首先要在E盘新建一个文本文件,命名为test.txt,输入若干字符 public cla ...
- windows 路由
route ? 查看帮助 route print 查看路由表 添加一条路由: route add 10.10.10.0 mask 255.255.255.0 192.168.1.1 #到达10.10 ...
- SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理
在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...
- S-T表学习笔记
$O(nlogn)$构造$O(1)$查询真是太强辣 然而不支持修改= = ShØut! #include<iostream> #include<cstring> #includ ...
- codeforces 914 D Bash and a Tough Math Puzzle
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #i ...
- Qt之布局管理器
简述 Qt的布局系统提供了一个简单的和强有力的方式,来自动排列窗口子控件布局. 所有QWidget子类可以使用布局来管理他们的子控件.QWidget::setLayout()函数可以为一个控件布局.当 ...
- Qt之QNetworkProxy(网络代理)
简述 QNetworkProxy类提供了一个网络层代理. QNetworkProxy提供了配置网络层代理支持Qt网络类的方法.目前支持的类有QAbstractSocket.QTcpSocket.QUd ...
- 使用sh运行bash脚本的奇怪问题
在同一个文件夹下有两个脚本.a.sh和b.sh,脚本内容例如以下: a.sh: echo "test for a" source b.sh b.sh: echo "tes ...
- 程序员之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)
主要内容:二维数组和指针.&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_C ...
- hibernate动态表名映射--仅仅有想不到,没有做不到
近期的一个项目有一个需求,有N个考核单位,要对每一个考核单位生成一张考核情况表.这样做的目的是横切数据库,这这个需求的实现中,我的组员遇到了一个技术问题,我将我的解决的方法和整个思考过程与大家分享, ...