• P1352 没有上司的舞会


    树上DP入门题

    dp[][0]表示不选他且以他为根的子树的最大快乐值

    dp[][1]表示选他且以他为根的子树的最大快乐值

    转移方程 .... 看代码吧

    // luogu-judger-enable-o2
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    
    int base[6010],enter[6010];
    int to[15000],nex[15000],head[15000];
    int dp[6010][2];
    
    void dfs(int u)
    {
    	dp[u][0]=0;
    	dp[u][1]=base[u];
    	for(int i=head[u];i;i=nex[i])
    	{
    		dfs(to[i]);
    		dp[u][0]+=max(dp[to[i]][0],dp[to[i]][1]);
    		dp[u][1]+=dp[to[i]][0];
    	} 
    }
    
    int main()
    {
    	ios::sync_with_stdio(false);
    	int n,l,k,s;
    	cin>>n;
    	for(int i=1;i<=n;i++)
    		cin>>base[i];
    	for(int i=1;i<n;i++)
    	{
    		cin>>l>>k;
    		to[i]=l;
    		nex[i]=head[k];
    		head[k]=i;
    		++enter[l];
    	}
    	for(int i=1;i<=n;i++)
    		if(enter[i]==0)
    		{
    			s=i;
    			break;
    		}	
    	dfs(s);
    	cout<<max(dp[s][0],dp[s][1]);
    	return 0;
    } 
    
  • 相关阅读:
    布局管理器
    下拉列表框
    时间,日期选择器
    关于部分基本控件的使用
    关于Activity
    什么时候修改class
    JavaScript Break 和 Continue 语句
    JavaScript While 循环
    JavaScript For 循环
    JavaScript Switch 语句
  • 原文地址:https://www.cnblogs.com/Alarak26/p/9374266.html
Copyright © 2020-2023  润新知