当前位置: 首页 > news >正文

P2015 二叉苹果树

题目

P2015 二叉苹果树

算法标签: 动态规划, 树上 d p dp dp, 树上背包问题, d f s dfs dfs, 记忆化搜索

思路

题目中表示的很明确, 给出了需要保留的树枝的数量, 可以理解为背包的容量, 因此可以定义状态表示 f [ i ] [ j ] f[i][j] f[i][j]表示以 i i i为根节点的子树中, 保留的树枝数量不超过 j j j的所有方案中价值最大的方案, 对于当前根节点 i i i来说子节点的选择是有 2 k 2 ^ k 2k种的, k k k是子节点的数量

代码

#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N = 110, M = N << 1;int n, m;
int head[N], ed[M], ne[M], w[M], idx;
int f[N][M];void add(int u, int v, int val) {ed[idx] = v, ne[idx] = head[u], w[idx] = val, head[u] = idx++;
}void dfs(int u, int fa) {for (int i = head[u]; ~i; i = ne[i]) {int v = ed[i];if (v == fa) continue;dfs(v, u);for (int j = m; j >= 0; --j) {for (int k = 0; k < j; ++k) {f[u][j] = max(f[u][j], f[u][j - k - 1] + f[v][k] + w[i]);}}}
}int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);memset(head, -1, sizeof head);cin >> n >> m;for (int i = 0; i < n - 1; ++i) {int u, v, w;cin >> u >> v >> w;add(u, v, w), add(v, u, w);}dfs(1, -1);int ans = f[1][m];cout << ans << "\n";return 0;
}
http://www.xdnf.cn/news/647443.html

相关文章:

  • C#高级:Winform桌面开发中CheckedListBox的详解
  • 泰迪杯特等奖案例深度解析:基于三维点云与深度学习的复杂零件装配质量检测系统设计
  • 基于AOD-Net与GAN的深度学习去雾算法开发
  • 【Spring】Spring AI 核心知识(一)
  • LSTM三个门控机制详解
  • 电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测
  • 对Spring IOC与AOP的理解
  • 深度学习在图像识别中的创新应用及其挑战
  • Innodb底层原理与Mysql日志机制深入刨析
  • 如何利用 Spring Data MongoDB 进行地理位置相关的查询?
  • vue+cesium示例:3Dtiles三维模型高度调整(附源码下载)
  • [IMX] 08.RTC 时钟
  • BGP笔记的基本概要
  • Linux进程通信之管道机制全面解析
  • Python基于Django的主观题自动阅卷系统【附源码、文档说明】
  • ​《分布式年夜》
  • export、export default和module.exports有什么区别
  • RocketMQ 深度解析:消息中间件核心原理与实践指南
  • 【Linux】进程 信号的产生
  • Vue修饰符全解析
  • ISO 26262-5 区分失效模式
  • OWASP Juice-Shop靶场(⭐⭐)
  • (1-6-2)Java泛型
  • 基于 PARE-YOLO 的多尺度注意力融合小目标检测模型
  • SRS流媒体服务器(7)源码分析之拉流篇
  • JavaScript数据类型及内置函数详解目录
  • 【数据集】2020年150m分辨率全球城市建筑高度数据集
  • 阿里云OSS Api工具类不使用sdk
  • Javase 基础加强 —— 08 IO流
  • 林曦词典|创造力