
#include <bits/stdc++.h> #define debug(x) std::cerr << "[" << __LINE__ << "]: " << #x << " = " << x << "\n" using i64 = long long; const int N = 300 + 5; int dp[N][N]; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, m; std::cin >> n >> m; ++m;//增加一个选择0的点 std::vector<std::vector<int>> adj(n + 1); for (int i = 1; i <= n; i++) { int v; std::cin >> v >> dp[i][1];//dp[i][j]表示对于选择的i节点的最大重量为j(自己以及选择的子节点个数)所产生的最大价值 adj[v].push_back(i);//建有向边 } std::function<void(int)> dfs = [&] (int u) { for (auto v : adj[u]) { dfs(v);//先向下 } for (auto v : adj[u]) { for (int j = m; j > 0; --j) {//完全背包,倒着更新,本来状态方程是dp[u][i][j] //也就是对于节点u前i个子节点限重为j的最大和,状态压缩成二维 for (int k = 0; k < j; ++k) { dp[u][j] = std::max(dp[u][j], dp[u][j - k] + dp[v][k]); } } } }; dfs(0); std::cout << dp[0][m];//输出:0号节点重量为m的最大值 return 0; }
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现