P1216数字三角形

Posted china-mjr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1216数字三角形相关的知识,希望对你有一定的参考价值。

这是USACO的一道记忆化搜索题,还记得原来学搜索就是被此所困。

给定n深的数,第i层有i个节点,存储有一个数字,询问从第一层走到最后一层所经过节点上数字和的最大值。我们很容易想到枚举所有路径来计算最大值,但这是2^n的复杂度,显然,对于固定的x,y的返回值是一定的,与上面怎么走过来的没有关系,所以会造成重复统计,所以我们要想办法进行优化。发现每个点只于下面的左子树最大值与右子树最大值有关,所以我们要做的就是再开一个f[][]数组记忆每一个点的最大值,如果被标记为已经记忆,即f数据被修改了,那么直接返回即可;如果没有修改,那么则累加下面的最大值即可。

dfs代码

int dfs(int x,int y){
    if(x==n) return mp[x][y];
    else return mp[x][y]+max(dfs(x+1,y),dfs(x+1,y+1))        
}
int ans=dfs(1,1);

 

记忆化搜索代码

void dfs(int x,int y){
    if(f[x][y]!=0) return f[x][y];
    if(x==n) return  mp[x][y];
    else  return  f[x][y]=mp[x][y]+max(dfs(x+1,y),dfs(x+1,y+1));
}

 

以上是关于P1216数字三角形的主要内容,如果未能解决你的问题,请参考以下文章

P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles

洛谷P1216 [USACO1.5]数字三角形 Number Triangles

洛谷 P1216 [USACO1.5]数字三角形 Number Triangles

P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles

洛谷 P1216 [USACO1.5]数字三角形 Number Triangles(水题日常)

P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles