A little question
查看原帖
A little question
818329
zhangzhixuan1楼主2024/8/6 19:40

AC code:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=305;
int n,m,a[MAXN],fa[MAXN],f[MAXN][MAXN];
vector<int>son[MAXN]; 
void dp(int p)
{
	if(son[p].size()==0) return;
	for(int i=0;i<son[p].size();i++)
	{
		dp(son[p][i]);
		for(int j=m;j>=1;j--)
		{
			for(int k=0;k<j;k++)
			{
				f[p][j]=max(f[p][j],f[son[p][i]][k]+f[p][j-k]);//TODO
			}//TODO
		}//TODO
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>fa[i]>>f[i][1];//TODO
		son[fa[i]].push_back(i);
	}
	m++;
	dp(0);
	cout<<f[0][m];
}

WA code:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=305;
int n,m,a[MAXN],fa[MAXN],f[MAXN][MAXN];
vector<int>son[MAXN]; 
void dp(int p)
{
	if(son[p].size()==0)
	{
		f[p][1]=a[p];
		return ;
	}
	if(p==0)m++;
	for(int i=0;i<son[p].size();i++)dp(son[p][i]);
	for(int i=0;i<son[p].size();i++)
	{
		for(int j=m;j>=1;j--)
		{
			for(int k=j-1;k>=0;k--)
			{
				f[p][j]=max(f[p][j],f[son[p][i]][k]+a[p]+f[p][j-k-1]);//TODO
			}//TODO
		}//TODO
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>fa[i]>>a[i];//TODO
		son[fa[i]].push_back(i);
	}
	dp(0);
	cout<<f[0][m];
}

Why?

2024/8/6 19:40
加载中...