第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

動態(tài)規(guī)劃——節(jié)點選擇(藍橋杯試題集)

標(biāo)簽:
算法

题目链接:

http://lx.lanqiao.cn/problem.page?gpid=T14

问题描述
有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少?
输入格式
第一行包含一个整数 n 。
接下来的一行包含 n 个正整数,第 i 个正整数代表点 i 的权值。
接下来一共 n-1 行,每行描述树上的一条边。
输出格式
输出一个整数,代表选出的点的权值和的最大值。
样例输入
5
1 2 3 4 5
1 2
1 3
2 4
2 5
样例输出
12
样例说明
选择3、4、5号点,权值和为 3+4+5 = 12 。
数据规模与约定
对于20%的数据, n <= 20。
对于50%的数据, n <= 1000。
对于100%的数据, n <= 100000。
权值均为不超过1000的正整数。


解题思路:这是一道树形动态规划问题,用F[i]表示从子树i中选择结点,且结点i必须被选择的最大值,用G[i]表示从子树i中选择结点,且结点i必须不被选择的最大值。
则F[i]=a[i]+\sum(G[j]),其中a[i]表示结点i的权值,j是i的子结点。
G[i]=\sum(max(F[j], G[j])),其中j是i的子结点。

这里采用/扩散深搜的方法,遍历所有的节点,记录每个节点选择情况进行DP,

建立l索引,即每一个节点l[i]所关联的[j]个节点

我们注意的是每次搜索时的剪枝,子节点不能回到父亲节点

我采取的做法是直接将父节点传进去,选取当前l[x][k]节点时注意l[x][k]值与f不同



#include<string.h>  #include<stdio.h>int dp[100010][2];     //每个节点取或不取的最大值 int l[100010][100];     //所属子节点 int fmax(int a,int b){	return a>b?a:b;}void list(int a,int b)   //构造树 {int i=0;int j=0;while(l[a][i])      //确保当前为空 i++;l[a][i]=b;          //连接 	while(l[b][j])j++;l[b][j]=a;}void dfs(int x,int f)   //深搜 {int i,k;k=0;while(i=l[x][k++]) //提取l[x][k] {if(i!=f)  //f为x点的父节点 i为x点的子节点,保证子父不同 {dfs(i,x); //递归下一层 dp[x][1]+=dp[i][0];dp[x][0]+=fmax(dp[i][0],dp[i][1]);//状态转移方程 }	//	printf("%d,%d\n",dp[x][1],dp[x][0]); }}int main() {int m,i,n,x;int a,b,c;while(~scanf("%d",&n))	{memset(l,0,sizeof(l));memset(dp,0,sizeof(dp));for(i=1;i<=n;i++)scanf("%d",&dp[i][1]);//选取i点初始拥有的权值 for(i=1;i<n;i++)		{scanf("%d%d",&a,&b);list(a,b);              //关联树 }/*        for(i=1;i<=n;i++)        {        for(x=0;l[i][x]!=0;x++)        printf("%d-%d\n",i,l[i][x]);        }        */dfs(1,0);x=fmax(dp[1][0],dp[1][1]);    //第一个点选或不选的max值 printf("%d\n",x);}return 0;}


點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消