树形动态规划(信息学竞赛)复习过程.ppt

树形动态规划(信息学竞赛)复习过程.ppt

ID:60795793

大小:101.00 KB

页数:20页

时间:2020-12-19

树形动态规划(信息学竞赛)复习过程.ppt_第1页
树形动态规划(信息学竞赛)复习过程.ppt_第2页
树形动态规划(信息学竞赛)复习过程.ppt_第3页
树形动态规划(信息学竞赛)复习过程.ppt_第4页
树形动态规划(信息学竞赛)复习过程.ppt_第5页
资源描述:

《树形动态规划(信息学竞赛)复习过程.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、树形动态规划(信息学竞赛)1333:选课(多叉树转二叉树)具体实现方法:使用数组模拟二叉树L[x]:表示X的左儿子是谁!初值-1R[x]:表示X的右儿子是谁!也就是X的兄弟,初值-1last[x]:表示原树中x的当前一个子节点son1现在的位置,假如x的另外一个儿子son2,要插入到二叉树中那么根据左儿子右兄弟的原则,既然son2跟son1为兄弟,那么就放到son1所在位置的右子树即可!代码:voidbuild(intx,inty)//y的父亲结点为x{if(L[x]==-1)L[x]=y;elseR[last[x]]=y;last[x]=y;}1333:VIJOS-P1180选课状

2、态F(x,y):表示节点x取y门课得最高学分方程F(x,y)=max{F(R[x],k),F(L[x],k-1)+a[x]+F(R[x],y-k)}k=0,1,..yF(L[x],k-1)+a[x]:表示左孩子选了k-1门课及包括课程x,共k门课的最大学分。F(R[x],y-k)表示右孩子只能选y-k门课的最大得分。分析出来了这么多,代码如何写才是关键,否则都是空中楼阁。我们引入记忆化搜索的思想,即每深搜一步,把搜做到的结果保存起来,当下次搜索到同样的位置时,直接使用!记忆化搜索经典题目:1911滑雪&&1257Functionintwork(intpos,intk){if(pos<

3、0

4、

5、k<=0)return0;//递归退出条件if(f[pos][k]!=-1)returnf[pos][k];//如果这个值以前被计算过,直接返回这个值f[pos][k]=work(r[pos],k);//左子树不选任何一个for(inti=0;i<=k-1;i++)f[pos][k]=max(f[pos][k],work(l[pos],i)+work(r[pos],k-i-1)+s[pos]);//动规过程returnf[pos][k];}2140:通向自由的钥匙通向自由的钥匙被放n个房间里,这n个房间由n-1条走廊连接。注意:这就是一棵树。本题的动规的过程与上一题选课是一样的

6、唯一不同的是题目给出树的根为1,还有树的联通性。建二叉树树的过程是需要大家仔细思考的。2140:通向自由的钥匙voidbuild(intx){for(inti=1;i<=n;i++)if(d[x][i]){d[x][i]=d[i][x]=0;if(ls[x]==-1)ls[x]=i;elsers[last[x]]=i;last[x]=i;build(i);}}1273:加分二叉树每一个结点有一个权值,给定的序列是中序遍历的点权序列。状态f[i][j]表示从i到j的中序序列组成的二叉树最大加分值。方程f[i][j]=max{f[i][k-1]*f[k+1][j]+f[k][k]}i<=

7、k<=jf[i][k-1]和f[k+1][j]直接拿过来用肯能不会求出最大的f[i][j],所以要引入记忆化的思想,递归的求出这两个的值。1273:加分二叉树longlongwork(intx,inty){if(x>y)returnf[x][y]=1;if(f[x][y]!=-1)returnf[x][y];for(intk=0;k<=y-x;k++)if(f[x][y]

8、录x到y区间的根,以便最后递归输出先根遍历。}returnf[x][y];}POJ2342Anniversaryparty题意:一个人不同他的直属上司一起参加舞会,问参会人员的权值和的最大值。显然每个人只有两种状态参加或者不参加状态f[i][0]表示第i个人不参加,f[i][1]表示此人参加,所的得到的子树的最大值。f[i][1]+=f[j][0];j是其下属的标号f[i][0]+=max{f[j][1],f[j][0]}本题使用链式前向星存边,找出根rootans=max{f[root][0],f[root][1]};POJ2342Anniversarypartyvoidwork(

9、intx){f[x][0]=0,f[x][1]=a[x];//初始化for(inty,i=head[x];i;i=next[i]){y=to[i];//y为x的子节点work(y);//先处理完y才能动规xf[x][0]+=max(f[y][0],f[y][1]);f[x][1]+=f[y][0];}}POJ3342PartyatHali-Bula基本题意与2342相同,需要特别判断与会名单是否唯一!思考判定方法?是否有特例!动规伴随着深搜,只需要考虑深搜

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。