上午一直在看别人的博客,看不懂,头疼,大神们都不写注释吗????
想了解一下动态规划和记忆化搜索,找到了这篇博文,费了半天劲大概把代码看懂了
数字三角形——递归、递推、记忆化搜索
第一个数据为正整数n,表示这组数据有n行,接下来是一组数字三角形
看完了递归做法,想自己手敲一下
真是费劲啊
#include<stdio.h>
int max(int x,int y);
int fun(int a,int b);
int tree[500][500],n;
int main(void)
{
while(scanf("%d",&n)!=EOF){//一共n行
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=i;j++){//第i行有i个数字
scanf("%d",&tree[i][j]);//读取三角形所有数据,第i行第j个数据
}
printf("%d\n",fun(1,1));
}
return 0;
}
int max(int x,int y);//比较两个数大小并返回较大的那个数
inline int max(int x,int y)
{
int ret;
ret=(x>y)?x:y;
return ret;
}
int fun(int a,int b)
{
return tree[a][b]+(a==n?0:max(fun(a+1,b),fun(a+1,b+1)));//穷举出所有分支,并从三角形底部处挑出较大的数字加上它的分支点数字,一直回推
}
我还是头一次把int变量声明写在main函数外,不这样做的话,fun()函数会报错。
写了有半个小时左右?之前看着真的费劲
我还是头一次费这么大力气研究递推和递归
等有空了再去看这篇博客,感觉写的很棒,不过有些地方有点小疑问
夜深人静写算法(二) - 动态规划
2019年1月25日14点23分