【树形dp】没有上司的舞会(C++)

描述

有个公司要举行一场晚会。
为了能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会邀请他的上司
(上司的上司,上司的上司的上司……都可以邀请)。
题目
每个参加晚会的人都能为晚会增添一些气氛,求一个邀请方案,使气氛值的和最大。

输入

第1行一个整数N(1<=N<=6000)表示公司的人数。
接下来N行每行一个整数。第i行的数表示第i个人的气氛值x(-128<=x<=127)。
接下来每行两个整数L,K。表示第K个人是第L个人的上司。
输入以0 0结束。

输出

一个数,最大的气氛值和。

样例

输入
7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0
输出
5





由于入门oj炸了,所以我现在在Mushroom OJ做题,这是我老师做的网站(据说是liao用脚打出来的,但是我发现这是抄过来的网站)
这个题是树形dp的模板题,思路是这样的:
定义一个二维数组g,用来存每个节点连接的节点
定义一个二维数组f, f [ x ] [ 0 ] f[x][0] f[x][0]代表不选这个节点的最大值, f [ x ] [ 1 ] f[x][1] f[x][1]代表选择这个节点的最大值
接着,我们再推导出状态转移方程,推出来是这样的 f [ x ] [ 0 ] = f [ x ] [ 0 ] m a x ( f [ i ] [ 1 ] , f [ i ] [ 0 ] ) f[x][0]=f[x][0]max(f[i][1],f[i][0]) f[x][0]=f[x][0]max(f[i][1],f[i][0]) f [ x ] [ 1 ] = f [ x ] [ 1 ] + f [ i ] [ 0 ] f[x][1]=f[x][1]+f[i][0] f[x][1]=f[x][1]+

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值