三维求助
查看原帖
三维求助
758211
zhangchenyi0509楼主2024/7/24 15:06
#include <bits/stdc++.h>
using namespace std;
int n,m,tk,s[305],cnt[305],f[305][305][305],fa[305];
vector <int> a[305];
void dfs (int x)
{
	int sum=1;
	for (int i=0;i<a[x].size ();i++)
	{
		sum++;
		dfs (a[x][i]);
		for (int j=1;j<=m;j++)
		{
			for (int k=0;k<j;k++)
			{
				f[x][sum][j]=max (f[x][sum-1][j-k]+f[a[x][i]][cnt[a[x][i]]][k],f[x][sum][j]);
			}
		}
	}
}
int main()
{
	cin>>n>>m;
	m++;
	for (int i=1;i<=n;i++)
	{
		cin>>tk>>s[i];
		if (!tk)
		{
			continue;
		}
		a[tk].push_back (i);
		cnt[tk]++;
		fa[i]=tk;
	}
	for (int i=1;i<=n;i++)
	{
		if (!fa[i])
		{
			a[0].push_back (i);
			cnt[0]++;
		}
	}
	for (int i=0;i<=n;i++)
	{
		for (int j=0;j<=m;j++)
		{
			f[i][1][j]=s[i];
		}
	}
	dfs (0);
	cout<<f[0][n][m]<<endl;
	return 0;
}
2024/7/24 15:06
加载中...