没有上司的舞会

题目

Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会,要求与会职员的快乐指数最大。但是,没有职员愿和直接上司一起与会。

输入描述 Input Description

第一行一个整数N。(1<=N<=6000)

接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)

接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。 最后一行输入0,0。

输出描述 Output Description

输出最大的快乐指数。


思路

状态的定义:

f[i][0] 表示上司不参加舞会的最大值

f[i][1] 表示上司参加舞会的最大值

代码

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN = 6005;
int Val[MAXN],Len[MAXN],Deg[MAXN];
int Map[MAXN][300],f[MAXN][2];
void dp(int Aim) {
f[Aim][1] = Val[Aim];
for(int i = 1; i<=Len[Aim]; i++) {
int & Son = Map[Aim][i];
dp(Son);
f[Aim][0] += max(f[Son][0],f[Son][1]);
f[Aim][1] += f[Son][0];
}
}
int main() {
int n;
scanf("%d",&n);
for(int i = 1; i<=n; i++) {
scanf("%d",&Val[i]);
}
while(1) {
int x,y;
if(!x) {
break;
}
scanf("%d%d",&x,&y);
Map[y][++Len[y]] = x;
Deg[x] ++;
}
int Root = 0;
for(int i = 1; i<=n; i++) {
if(!Deg[i]) {
Root = i;
break;
}
}
dp(Root);
printf("%d",max(f[Root][0],f[Root][1]));
return 0;
}

最大利润

题目描述

政府邀请了你在火车站开饭店,但不允许同时在两个相连接的火车站开。任意两个火车站有且只有一条路径,每个火车站最多有50个和它相连接的火车站。 告诉你每个火车站的利润,问你可以获得的最大利润为多少。

输入格式

第一行输入整数N(<=100000),表示有N个火车站,分别用1,2。。。,N来编号。接下来N行,每行一个整数表示每个站点的利润,接下来N-1行描述火车站网络,每行两个整数,表示相连接的两个站点。

输出格式

输出一个整数表示可以获得的最大利润。


思路

首先,输入的图不是一颗树吗?其实是的,一个无向连通图(题目中可能说掉了),随便选一个点当根节点就行。


代码

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN = 100005;
int Val[MAXN],Len[MAXN];
int Vis[MAXN],Deg[MAXN];
int Map[MAXN][55],f[MAXN][2];
void dp(int Aim) {
Vis[Aim] = 1;
f[Aim][0] = 0;
f[Aim][1] = Val[Aim];
for(int i = 1; i<=Len[Aim]; i++) {
int & Son = Map[Aim][i];
if(!Vis[Son]) {
dp(Son);
f[Aim][0] += max(f[Son][0],f[Son][1]);
f[Aim][1] += f[Son][0];
}
}
}
int main() {
int n;
scanf("%d",&n);
for(int i = 1; i<=n; i++) {
scanf("%d",&Val[i]);
}
for(int i = 1; i<n; i++) {
int x,y;
scanf("%d%d",&x,&y);
Map[x][++Len[x]] = y;
Map[y][++Len[y]] = x;
}
dp(1);
printf("%d",max(f[1][0],f[1][1]));
return 0;
}

树形DP(例题)的更多相关文章

  1. 树形dp|无根树转有根树|2015年蓝桥杯生命之树

    2015年蓝桥杯第十题--生命之树(无根树dfs) ①暴力解法:枚举子集(选点) + dfs判断连通性(题目要求连通)满足上面两个条件下找出最大值权值和 ②dfs无根树转有根树,递归找最优 先学习无根 ...

  2. [提升性选讲] 树形DP进阶:一类非线性的树形DP问题(例题 BZOJ4403 BZOJ3167)

    转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7337179.html 树形DP是一种在树上进行的DP相对比较难的DP题型.由于状态的定义多种多样,因此解法也五 ...

  3. [DP之树形DP]

    树形dp出了应该还是比计数dp要简单的 因为很好可以看出来 常用的是一个F记录子树内的 一个G记录子树外的 还有一种就是有环的做过要用状压搞一下 不说这么多直接上例题 [HAOI2015]T1 经典的 ...

  4. 『战略游戏 最大利润 树形DP』

    通过两道简单的例题,我们来重新认识树形DP. 战略游戏(luoguP1026) Description Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题.他要 ...

  5. 『没有上司的舞会 树形DP』

    树形DP入门 有些时候,我们需要在树形结构上进行动态规划来求解最优解. 例如,给定一颗\(N\)个节点的树(通常是无根树,即有\(N-1\)条无向边),我们可以选择任意节点作为根节点从而定义出每一颗子 ...

  6. 树形dp 入门

    今天学了树形dp,发现树形dp就是入门难一些,于是好心的我便立志要发一篇树形dp入门的博客了. 树形dp的概念什么的,相信大家都已经明白,这里就不再多说.直接上例题. 一.常规树形DP P1352 没 ...

  7. 【BZOJ1040】[ZJOI2008]骑士 树形DP

    [BZOJ1040][ZJOI2008]骑士 Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情 ...

  8. 树形DP初探•总结

    这几天,我自学了基础的树形DP,在此给大家分享一下我的心得.   首先,树形DP这种题主要就是解决有明确分层次且无环的树上动态规划的题.这种题型一般(注意只是基础.普通的情况下)用深度优先搜索来解决实 ...

  9. CH5402 选课【树形DP】【背包】

    5402 选课 0x50「动态规划」例题 描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N≤300) 门的选修课程,每个学生可选课程的数量 M 是 ...

  10. 动态规划专题(二)——树形DP

    前言 \(DP\)这东西真的是博大精深啊...... 简介 树形\(DP\),顾名思义,就是在树上操作的\(DP\),一般可以用\(f_i\)表示以编号为\(i\)的节点为根的子树中的最优解. 转移的 ...

随机推荐

  1. Win10安装msi程序报错2503和2502错误解决方案

    刚升级了系统到win10,重新搭建开发环境,在安装scala的时候一直报2503.2502错误,如图 试了好几种办法都不好使,现在罗列依次用到的三种方法: 一.命令提示符(管理员)启动 "w ...

  2. SAP技术专家的ABAP调试器培训材料

    首先弄清楚ABAP Classic调试器和新调试器的区别: Classic debugger: (1) Static breakpoint a. BREAK-POINT : non-user spec ...

  3. Geekforgeek week1

    1. is palindrome solution 1: check to reverse the digit, if they are the same number https://www.gee ...

  4. TB5上正常使用msfconsole

    在TB上使用系统自带的msfconsole,给出以下错误 [-] Failed to connect to the database: could not connect to server: Con ...

  5. MATLAB入门学习(整合)

    整合一下,都是链接地址: MATLAB入门学习(一):初次使用.. MATLAB入门学习(二):矩阵相关 MATLAB入门学习(三):矩阵常用函数 MATLAB入门学习(四):编写简单.m文件和函数文 ...

  6. BIND简易教程(2):BIND视图配置

    目录:BIND简易教程(1):安装及基本配置BIND简易教程(2):BIND视图配置(本篇)BIND简易教程(3):DNSSec配置 上文书说到,我们把aaa.apple.tree解析到192.168 ...

  7. miniui dataGrid detail grid

    <div >      <div id="vkhGrjx_grid" class="mini-datagrid" style="wi ...

  8. Educational Codeforces Round 55 (Rated for Div. 2) C. Multi-Subject Competition 【vector 预处理优化】

    传送门:http://codeforces.com/contest/1082/problem/C C. Multi-Subject Competition time limit per test 2 ...

  9. ICompare 可比较接口

    执行

  10. mysql.sock问题

    Can't connect to local MySQL server through socket '/tmp/mysql.sock' 上述提示可能在启动mysql时遇到,即在/tmp/mysql. ...