我样例没过,AC了??
查看原帖
我样例没过,AC了??
1285611
JiangMzz楼主2024/8/9 20:10
#include <bits/stdc++.h>
using namespace std;
int n, q;
vector<int> p[101];
int f[101][101];
int a[101];
int dfs(int i, int j) {
	//f[i][j] i的子树 保留j根树枝 最多苹果数
	if (p[i].size() == 0) return 0;//没有子节点
	if (j == 0) return 0; 
	if (f[i][j] != 0) return f[i][j];
	for (int k = 0; k <= j; k++) {
		if (k == 0) f[i][j] = max(f[i][j], dfs(p[i][1], j - 1) + a[p[i][1]]);
		else if (k == j) f[i][j] = max(f[i][j], dfs(p[i][0], j - 1) + a[p[i][0]]);
		else f[i][j] = max(f[i][j], dfs(p[i][0], k - 1) + a[p[i][0]] + dfs(p[i][1], j - k - 1) + a[p[i][1]]);
	} 
	return f[i][j];
}
int main() {
	cin >> n >> q;
	for (int i = 1; i < n; i++) {
		int u, v, w;
		cin >> u >> v >> w;
		a[v] = w;
		p[u].push_back(v);
	}
	cout << dfs(1, q);
	return 0;
}
2024/8/9 20:10
加载中...