#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;
}
用数组保存 记忆化搜索不会超时
这是一类动态规划问题——用空间换取时间
原题地址 点击打开链接