博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【题解】博览会
阅读量:4657 次
发布时间:2019-06-09

本文共 1889 字,大约阅读时间需要 6 分钟。

题目描述

        某市正在举行一场大型博览会,博览会有n 个展馆,每个展馆里有若干个展台。这n个展馆以及它们之间的道路可以看成一棵二叉树,博览会的出入口设在根节点——1号展馆,小明将从这里出发乘坐电瓶车到各个展馆参观,并最终回到1号展馆出口。

        由于路程差异,乘坐电瓶车往返不同展馆间的费用也有所区别。出发时,小明的乘车卡里余额为k。他现在想知道,若全程都乘坐电瓶车,他最多能参观多少个展台?

        说明:只要小明到达了某个展馆,就会参观该展馆内的所有展台,若多次参观同一个展台不重复计算。

 

输入输出格式

输入格式

        输入共n+2行:

        第1行为2个整数n、k,用一个空格隔开,表示展馆个    数和小明乘车卡初始余额。

        第2行为n个数,用一个空格隔开,表示1号至n号各展馆的展台数目。

        接下来n行,每行4个数,用一个空格隔开;

        第i+2行的4个数分别表示展馆i左子节点展馆号、到左子节点展馆的费用、右子节点展馆号、到右子节点展馆的费用。如果子节点展馆号为0则表示没有对应的子节点展馆。

 

输出格式

        输出共1行,1个整数,表示小明最多能参观的展台数量。

 

输入输出样例

输入样例

10 20

2 8 5 1 10 5 9 9 3 5

2 1 3 2

4 8 5 2

6 2 7 2

8 3 9 6

0 0 10 2

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0

 

输出样例

39

 

说明

样例说明

        根据样例数据,可以得到如下展馆二叉树示意图(每个圈内标示了展馆号及展台数):

Failed to load picture

        由图可知,小明沿红色箭号路径,到1、2、5、3、6、7 这六个展馆参观并返回,往返乘车费用为18,参观展台数为39,为能够实现的最大值。

 

数据规模

        对于40%的数据:n≤10;k≤20;

        对于100%的数据:n≤50;k≤100;所有展馆的展台总数不超过10^5。

 

题解

         明显可以看出是树形dp,每次都给子结点传递可花费的费用即可。

#include 
#define MAX_N (50 + 5) #define MAX_M (100 + 5) using namespace std;int n, m;struct Node{ int v; int l, lw, r, rw;};Node a[MAX_N];int dp[MAX_N][MAX_M];int DP(int x, int y){ if(dp[x][y]) return dp[x][y]; if(a[x].l && a[x].r) { for(register int i = a[x].lw; i + a[x].rw <= y; ++i) { dp[x][y] = max(dp[x][y], DP(a[x].l, i - a[x].lw) + DP(a[x].r, y - i - a[x].rw)); } } if(a[x].l && y >= a[x].lw) { dp[x][y] = max(dp[x][y], DP(a[x].l, y - a[x].lw)); } if(a[x].r && y >= a[x].rw) { dp[x][y] = max(dp[x][y], DP(a[x].r, y - a[x].rw)); } dp[x][y] += a[x].v; // cout << x << " " << y << ": " << dp[x][y] << "\n"; return dp[x][y];}int main(){ cin >> n >> m; for(register int i = 1; i <= n; ++i) { cin >> a[i].v; } for(register int i = 1; i <= n; ++i) { cin >> a[i].l >> a[i].lw >> a[i].r >> a[i].rw; a[i].lw <<= 1; a[i].rw <<= 1; } cout << DP(1, m); return 0;}
参考程序

 

转载于:https://www.cnblogs.com/kcn999/p/10624850.html

你可能感兴趣的文章
浅谈WPF的VisualBrush
查看>>
经常用得到的安卓数据库基类
查看>>
vue element 关闭当前tab 跳转到上一路由
查看>>
4、面向对象
查看>>
[NOI2005]聪聪与可可(期望dp)
查看>>
POJ 3723
查看>>
Elgg网站迁移指南
查看>>
Sublime Text 3 及Package Control 安装(附上一个3103可用的Key)
查看>>
基于uFUN开发板的心率计(一)DMA方式获取传感器数据
查看>>
【dp】船
查看>>
oracle, group by, having, where
查看>>
nodejs pm2使用
查看>>
CSS选择器总结
查看>>
mysql中sql语句
查看>>
sql语句的各种模糊查询语句
查看>>
C#操作OFFICE一(EXCEL)
查看>>
【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
查看>>
移动端单屏解决方案
查看>>
web渗透测试基本步骤
查看>>
使用Struts2标签遍历集合
查看>>