您的位置:首页 > 其它

HDOJ 2084 数塔-简单DP

2016-04-06 20:43 225 查看
简单的经典DP数塔 给你类似下面的塔型数组,让你选一条路径使路上的节点数之和最大;



从下往上面分析,在倒数第二排可以见,每个数下面只接了两个数,也就是说要往上面走到2,必须从下面两条路选,则选择最大的那个值,以此类推往上走,使最上面的值最大;

转移方程 F[i][j]=max{F[i+1][j],F[i+1][j+1]}+F[i][j];

#include<stdio.h>
#include<string.h>
int main()
{
int T,n,i,j;    //F[i][j]=max{F[i+1][j],F[i+1][j+1]}+F[i][j];
int num[200][200];
scanf("%d",&T);
while(T--)
{
memset(num,0,sizeof(num));
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
scanf("%d",&num[i][j]);
}
}
for(i=n;i>=1;i--)
{
for(j=1;j<=i;j++)
{
if(num[i+1][j]>num[i+1][j+1])
num[i][j]=num[i+1][j]+num[i][j];
else
num[i][j]=num[i+1][j+1]+num[i][j];
}
}
printf("%d\n",num[1][1]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: