#include <stdio.h>
//#include <string.h>
int main()
{
int i,j,m,n,a[101][101],dp[101][101];
scanf("%d",&m);
while(m>0)
{
m--;
scanf("%d",&n);
for(i=0; i<n; i++)
for(j=0; j<=i; j++)
{
scanf("%d",&a[i][j]);
dp[i][j]=a[i][j];
}
for(i=n-2; i>=0; i--) //用状态转移方程求最优子结构
for(j=i; j>=0; j--)
dp[i][j]=a[i][j]+(dp[i+1][j]>dp[i+1][j+1]?dp[i+1][j]:dp[i+1][j+1]);//要注意判断dp[i+1][j]、dp[i+1][j+1]大小时要有括号
printf("%d\n",dp[0][0]);
}
return 0;
}
用数组保存 记忆化搜索不会超时
这是一类动态规划问题——用空间换取时间
原题地址 点击打开链接
本文介绍了一个经典的动态规划问题:寻找从三角形顶点到底边的最大路径和。通过使用数组实现记忆化搜索,避免了重复计算,有效提高了算法效率。
1062

被折叠的 条评论
为什么被折叠?



