求树型dp详细介绍网址
查看原帖
求树型dp详细介绍网址
365777
halehu楼主2022/1/22 19:05

rt,本人树型dp了解了个皮毛,打出一份男不男女不女的30pts代码

#include<iostream>
using namespace std;
struct node{
	int v,id;
}l[100005];
node r[100005];
int n,q,i,xx[100005]={0},a,b,c,val[1005];
int dp[105][105][2];
int dfs(int x,int re,int c)
{   
    if(re<=0)return 0;
	if(dp[x][re][c])
	   return dp[x][re][c];
	if(l[x].id==0)
	   return 0;
	dp[x][re][c]=max(dfs(l[x].id,re-1,1)+l[x].v,dfs(r[x].id,re-1,1)+r[x].v);
	if(re>1)dp[x][re][c]=max(dp[x][re][c],dfs(r[x].id,re-2,1)+dfs(l[x].id,re-2,1)+l[x].v+r[x].v);
	return dp[x][re][c];
}
int main()
{
   	cin>>n>>q;
   	xx[1]=1;
   	for(i=1;i<=n-1;i++)
   	{
   		cin>>a>>b>>c;
   		if(xx[a])xx[b]=1,l[a].id?(r[a].id=b,r[a].v=c):(l[a].id=b,l[a].v=c);
   		else xx[a]=1,l[b].id?(r[b].id=a,r[b].v=c):(l[b].id=a,l[b].v=c);
	}
	/*for(i=1;i<=n;i++)
	{
		if(l[l[i].id].id==0)
		   val[l[i].id]=l[i].v;
		if(r[r[i].id].id==0)
		   val[r[i].id]=r[i].v;
	}*/ 
	//for(i=1;i<=n;i++)cout<<val[i]<<" ";
    cout<<dfs(1,q,1);
}
2022/1/22 19:05
加载中...