当前位置: 首页 > 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;
}

相关文章:

  • 学习黑客Metasploit 框架的原理
  • C++面试题:虚函数表(vtable)的底层实现机制与应用解析
  • 鸿蒙OSUniApp 制作个性化的评分星级组件#三方框架 #Uniapp
  • SWOT分析:MCP(Model Context Protocol)与传统编程解决方案
  • 快速上手SHELL脚本基础及变量与运算
  • 【Pycharm】文件夹一直显示正在加载
  • 【unity游戏开发——编辑器扩展】Gizmos可视化辅助工具
  • Linux中SHELL脚本常用命令
  • 充电枪IEC62196/EN 62196测试内容
  • 【STM32开发板】电源设计原理
  • 电机控制学习笔记
  • ASR/TTS model 通过量化提升推理速度
  • 【Redis】第2节|Redis基本数据类型
  • 29. 自动化测试开发框架拓展之接口测试
  • 堆栈计算机 零地址指令
  • Voice Conversion语音转换
  • Python5.26打卡(day27)
  • 解决虚拟机挂起后,docker容器无法访问的问题
  • 电子电路:什么是感应电动势?
  • Java 版本升级指南:从 Java 8 到 Java 11/17/21 的核心优势与新特性
  • wordpress网站加载慢/百度提交收录入口
  • 开发网站教程/怎么做手工
  • 网站记录登录账号怎么做/网页链接制作生成
  • 各大电商购物网站转化率报表/关键词歌曲
  • 哪家专门做特卖的网站?/谷歌网址
  • 做好网站建设通知/品牌运营公司