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

news/2024/7/20 20:29:40 标签: 算法, 深度优先, 图论

资源限制

内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

  逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能。现在我们可以了解到,每个技能都有一个前提技能,只有学完了前提技能才能学习当前的技能(有一个最根本的技能不需要前提技能)。学习每个技能要消耗一个技能点,然后可以获得这个技能的威力值。由于逗志芃要陪妹子,所以他希望你教他如何点技能使得威力值最大从而成为强力党。

输入格式

  第一行两个数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。

思路:树形DP

代码如下:

#include<bits/stdc++.h>
using namespace std;
vector<int>tree[210];
int a[210];
int isRoot[210];
int f[210][210][210];//i为根结点,j为遍历到第j个结点了,k为能选多少个结点 
int n,m;
void dfs(int x){
	for(int i=0;i<tree[x].size();i++)dfs(tree[x][i]);//先更新子结点 
	
	f[x][1][1]=a[x];//只选了根结点
	f[x][1][0]=0;//一个都没选
	for(int i=2;i<=tree[x].size()+1;i++){//从2开始是因为根结点x的两种情况已经遍历完了;tree[x].size只是子元素的个数,还得+1,表示包括x 
		int v=tree[x][i-2];//i-2也很好理解,对于一个数,根结点是1,则第一个子结点是2,它的编号也就是tree[x][i-2] 
		for(int j=0;j<=m;j++){
			for(int k=0;k<j;k++){
				f[x][i][j]=max(f[x][i][j],f[x][i-1][j-k]+f[v][tree[v].size()+1][k]);//tree[v].size()+1是子结点数加根结点数 
			}
		}
	} 
	
	
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	memset(isRoot,true,sizeof(isRoot));
	for(int i=1;i<=n-1;i++){
		int key,value;
		cin>>key>>value;
		isRoot[value]=false;
		tree[key].push_back(value);
	}
	for(int i=1;i<=n;i++){
		if(isRoot[i]){
			dfs(i);
			cout<<f[i][tree[i].size()+1][m]<<endl;
		}
	}
	
	return 0;
}


http://www.niftyadmin.cn/n/5416518.html

相关文章

C++错误总结(1)

1.定义函数类型时&#xff0c;如果没有返回值&#xff0c;用void void swap(int &x, int &y){ int tem x; x y; y tem; } 2.输入时&#xff0c;不加换行符 cin >> a >> b >> c >> endl ;(红色标记的是错误的部分) 3.【逆序出入…

探索JavaScript宝库:打开基础知识与实用技能之门(数据类型与变量+ 条件与循环+函数与模块+DOM+异常+ES6)

目录 [TOC](目录)一、JavaScript的基础知识1. 数据类型与变量2. 条件与循环3. 函数与模块 二、JavaScript的实用技能1. DOM操作与事件处理2. 异步编程与Promise3. ES6语法 三、JavaScript的重要性与应用场景结语 欢迎阅读本篇博客&#xff0c;我们将深入探讨JavaScript语言的基…

黑马点评-异步秒杀实现

异步秒杀思路 我们来回顾一下下单流程 当用户发起请求&#xff0c;此时会请求nginx&#xff0c;nginx会访问到tomcat&#xff0c;而tomcat中的程序&#xff0c;会进行串行操作&#xff0c;分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足够 3、查询订单 4、校验是…

Reset Verification IP

Reset Verification IP IP 参数及接口 IP 例化界面 相关函数 assert_reset //置位复位信号 < hierarchy_path>.assert_reset();deassert_reset //取消置位复位信号 < hierarchy_path>.deassert_reset();set_master_mode //设置 RST_VIP 模式为 Master < hi…

登录校验认证

会话技术 会话&#xff1a;用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪&#xff1a; 一种维护浏览器状态的方法&#xff0c;服务器需要识别多次请…

实现echarts的y轴自适应,而不从0开始

原始echart 即使取值区间为15-30之间&#xff0c;但y轴的值依旧从0开始&#xff0c;不能实现自适应。 可以看到如果数值接近&#xff0c;那么曲线就不会很明显&#xff0c;最后找到个属性。 scale:true //y轴自适应 加上之后就可以自由伸展了。 实现细节 在yAxis配置项添…

java jdk17 HashMap解读

类描述 基于Hash表的Map接口实现。此实现提供了所有的可选的map操作&#xff0c;并且避免了null值和null键。&#xff08;HashMap类大体上等价于Hashtable,除了它是非同步的和禁止null&#xff09;。此类不保证map的顺序。特别是&#xff0c;不保证随着时间的变化顺序保持不变…

基于单片机的篮球自动计分器控制系统

摘要:为了实现篮球自动计分器高精度控制,提出基于单片机的篮球自动计分器系统设计方法。构建篮球自动计分器控制系统的总体结构模型,采用单片机作为主控芯片,构建篮球自动计分器控制系统的程序加载电路,根据篮球自动计分器的传感阵元融合结果,实现对篮球自动计分器的输出稳…