关于这题
查看原帖
关于这题
378346
expnoi楼主2022/4/2 21:17
#include<bits/stdc++.h>
using namespace std;
int n,m,s[1001],f[1001][1001];
vector<int> G[1001];
void dfs(int u)
{
	f[u][0]=0;
	for(int i=0;i<G[u].size();i++)
	{
		int v=G[u][i];
		dfs(v); 
		for(int t=m;t;t--)
		{
			for(int j=t;j;j--)
			{
				f[u][t]=max(f[u][t],f[u][t-j]+f[v][j]);
			}
		}
	}
	if(u)
	for(int i=m;i;i--)
	{
		f[u][i]=f[u][i-1]+s[u];
	}
}
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		int u;
		cin>>u>>s[i];
		G[u].push_back(i);
		
	}
	memset(f,0xcf,sizeof(f));
	dfs(0);
	cout<<f[0][m];
}

第15行的j为什么能取到t呢?如果取到了,岂不是u去不到了吗?

2022/4/2 21:17
加载中...