您的位置:首页 > 其它

hdu 1561 The more, The Better(树形dp入门)

2016-03-08 15:31 579 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1561

树形dp:

#include<iostream>
#include<cstring>
#include<vector>
using namespace std;

const int mx=222;
int dp[mx][mx];
vector<int>g[mx];

void dfs(int x,int m)
{
if (m==0) return ;
for (int i=0;i<g[x].size();i++)
{
int cut=g[x][i];
dfs(cut,m-1);
for (int j=m;j>=1;j--)
{
int v=j;
for(int k=1;k<v;k++)
{
dp[x][v]=max(dp[x][v],dp[x][v-k]+dp[cut][k]);
}
}
}
}

int main()
{
int n,m;
while(cin>>n>>m)
{
memset(dp,0,sizeof(dp));
if (!n&&!m) return 0;
int a,i;
for (i=0;i<=n;i++) g[i].clear();
for (i=1;i<=n;i++)
{
cin>>a>>dp[i][1];
g[a].push_back(i);
}
dfs(0,m+1);
cout<<dp[0][m+1]<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: