#include "bits/stdc++.h"
using namespace std;
int dp[101][101]={{0}};
int N,V;
vector<int>sum[101];
int w[101];
int v[101];
vector<int>all;
int dp1[101]={0};
void dfs(int i)
{
for(int k=w[i];k<=V;k++)
{
dp[i][k]=v[i];
}
for(int j=0;j<sum[i].size();j++)
{
dfs(sum[i][j]);
for(int k=V;k>=w[i];k--)
{
for(int h=0;h<=k-w[i];h++)
{
dp[i][k]=max(dp[i][k],dp[i][k-h]+dp[sum[i][j]][h]);
}
}
}
}
int main()
{
cin>>N>>V;
int s;
for(int i=1;i<=N;i++)
{
cin>>w[i]>>v[i]>>s;
if(s==0)all.push_back(i);
else
{
sum[s].push_back(i);
}
}
for(int i=0;i<all.size();i++)
{
dfs(all[i]);
for(int k=V;k>=1;k--)
{
for(int h=0;h<=k;h++)
{
dp1[k]=max(dp1[k],dp1[k-h]+dp[all[i]][h]);
}
}
}
cout<<dp1[V];
// 请在此输入您的代码
return 0;
}
树形背包--
最新推荐文章于 2024-08-22 17:27:46 发布