社区讨论
求条P2014(玄关)
学术版参与者 2已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @md9igxkd
- 此快照首次捕获于
- 2025/07/19 08:29 8 个月前
- 此快照最后确认于
- 2025/11/04 04:07 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
//using int = long long;
int n,m,s[305],f[305][305];
vector <int> k[305];
void dp(int x)
{
f[x][1] = s[x];
for (int i = 0;i < k[x].size();i++)
{
int y = k[x][i];
dp(y);
for (int j = m;j > 0;j--)
{
if (f[x][j] == -1)
{
continue;
}
for (int l = 1;l <= m - j;l++)
{
if (f[y][l] == -1)
{
continue;
}
f[x][j + l] = max(f[x][j + l],f[x][j] + f[y][l]);
}
}
}
}
int main()
{
cin >> n >> m;
memset(f,-1,n + 1);
f[0][0] = 0;
for (int i = 1;i <= n;i++)
{
int x;
cin >> x >> s[i];
k[x].push_back(i);
}
dp(0);
cout << f[0][m];
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...