强力党逗志芃

  • 题目浏览
  • 算法代码
  • 算法核心思路

题目浏览

资源限制
时间限制:1.0s 内存限制:256.0MB

问题描述
  逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能。现在我们可以了解到,每个技能都有一个前提技能,只有学完了前提技能才能学习当前的技能(有一个最根本的技能不需要前提技能)。学习每个技能要消耗一个技能点,然后可以获得这个技能的威力值。由于逗志芃要陪妹子,所以他希望你教他如何点技能使得威力值最大从而成为强力党。
  
输入格式
  第一行两个数n,m表示有n个技能和m个技能点。第二行有n个数,第i个数表示第i个技能的威力值。
  之后的n-1行,每行两个数x,y,表示y技能的前提技能是x,也就是说先学第x个技能才能学弟y个技能。
  
输出格式
  一个数,最大的威力值。
  
样例输入
3 2
1 10 20
1 2
1 3

样例输出
21

数据规模和约定
  0<n,m<=200, 技能的威力值不超过200。

算法代码

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;const int N = 210;int n,m;
int q[N];
int h[N],e[N],ne[N],idx;
int dp[N][N];//以i为根节点,总花费的点数不超过j的最大方案
bool st[N];//是否有前驱
int res = 0;//伤害的最大的值void add(int x,int y)
{e[idx] = y,ne[idx] = h[x],h[x] = idx++;
}void dfs(int u)
{for(int i = h[u];i != -1; i = ne[i])//循环物品组{int son = e[i];dfs(son);for(int j = m - 1; j >= 0; j--)//循环剩余的点数for(int k = 0; k <= j; k++)//循环决策dp[u][j] = max(dp[u][j], dp[u][j - k] + dp[son][k]);}//将当前的节点1for(int i = m; i >= 1; i--) dp[u][i] = dp[u][i - 1] + q[u];dp[u][0] = 0;
}int main()
{cin >> n >> m;memset(h, -1 ,sizeof h);for(int i = 1; i <= n; i++)//读取每个节点的值cin>>q[i];for(int i = 1; i < n; i++)//读取节点之间的关系{int x,y;cin >> x >> y;add(x,y);//x为y的父节点st[y] = true;}int root;//寻找根节点for(int i = 1; i <= n; i++)if(st[i] == false){root = i;break;}dfs(root);cout << dp[root][m] << endl;return 0;
}

算法核心思路

这个题目属于 树形动态规划、有依赖的背包问题

技能与技能之间有从属关系,所以可以将节点变成一个树形结构

dp[i][j] 表示以i为根节点(选择的技能),容积为j(能用的技能点数)的背包最多能装下的价值(伤害最高)

状态转移可以看成是分组背包问题(以子节点作为一组,每组里面有若干个体积的划分,且每个体积只能选一次,选择价值最大的那个体积),以体积作为划分的依据(如果是以点为划分的依据,那么时间复杂度会很高)

这个是之前有人私信我,然后我写的整个流程

蓝桥杯 试题 算法训练 强力党逗志芃(C++)相关推荐

  1. 试题 算法训练 强力党逗志芃

    问题描述 逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能.现在我们可以了解到,每个技能都有一个前提技能,只有学完了前提技能才能学习当前的技能(有一个最根本的技能不需要前提技能).学 ...

  2. 蓝桥杯 算法训练 强力党逗志芃

    蓝桥杯 算法训练 强力党逗志芃 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能.现在我们可以了解到,每个 ...

  3. 算法训练 强力党逗志芃

    算法训练 强力党逗志芃 目录 1.题目 2.输入格式 3.输出格式 4.代码部分 目录 代码分析2022/4/16补 1.题目 问题描述 逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学 ...

  4. 蓝桥杯算法训练-强力党逗志芃

    持续更新蓝桥杯算法训练题解,有兴趣可以关注一波呀 题目 逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能.现在我们可以了解到,每个技能都有一个前提技能,只有学完了前提技能才能学习当前 ...

  5. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解

    题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...

  6. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解 - 未完善

    题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...

  7. 蓝桥杯 试题 算法训练 无聊的逗

    蓝桥杯 试题 算法训练 无聊的逗 问题描述 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘 ...

  8. 【蓝桥杯 算法训练】强力党逗志芃

    题目 题目链接 蓝桥杯 算法训练 强力党逗志芃 思路: 树形dp 定义状态: dp[i][j]表示以i为根,消耗j个技能点,最多能换取的v 状态转移方程: dp[pos][k]=max(dp[son] ...

  9. 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-987 强力党逗志芃

    第十四届蓝桥杯集训--练习解题阶段(无序阶段)-ALGO-987 强力党逗志芃 目录 第十四届蓝桥杯集训--练习解题阶段(无序阶段)-ALGO-987 强力党逗志芃 前言 关于数学的疑问 算法训练 强 ...

最新文章

  1. SQL Server2016 原生支持JSON
  2. 高并发高负载网站的系统架构
  3. linux last 命令年份,【帝联运维课堂】(第七十二期)Linux下last命令如何显示年份...
  4. HDOJ 5147 Sequence II 树阵
  5. java集群_身为Java程序员的你知道分布式与集群的联系及区别吗?
  6. Hadoop单机环境配置
  7. Spring错误小结
  8. FileReader/FileWriter复制文件
  9. python菜鸟100例精选
  10. 【AI视野·今日CV 计算机视觉论文速览 第213期】Fri, 4 Jun 2021
  11. 关于android各种双卡手机获取imei,imsi的处置(mtk,展讯,高通等)
  12. nohup java -jar
  13. JBuilder 2005 Enterprise注册破解
  14. 优道在线屏幕截图控件(UUDoc Screen Capture Control)
  15. 高中计算机课程网页修改,高中信息技术教学贯彻新课改理念
  16. Windows应用崩溃捕获
  17. 登录mysql报错Failed to connect to backoff 或 Failed to get D-Bus connection: Operation not permitted解决方法
  18. 天源石化举行国庆前消防应急-装车台液态烃泄漏演练
  19. 效果炸了,Drawable 实现红鲤鱼动画,点哪儿游哪儿(下)
  20. 小白零基础C#学习笔记

热门文章

  1. qpython终端怎么使用_ATX-uiautomator2 使用 QPython 在 Android 手机内执行自动化 -及wsl安装使用【未成功】...
  2. python 主程序等待 子线程_Python多线程中主线程等待所有子线程结束的方法
  3. python实数符号_使用python将无符号int转换为有符号浮点
  4. 网页不能复制文字解决方法总结(亲测有效)
  5. 点云质量评估:BD-BR和BD-PSNR计算
  6. elasticsearch查询错误
  7. 前端生成pdf并导出,解决了图片不能绘制的问题.(一)
  8. 用神经网络解决拼图游戏
  9. 作为码农的我嫁了个程序员老公(结婚、生娃、婆媳、未来)
  10. 按键保持电路--电路仿真