Input

输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。

Output

对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。

Sample Input

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

Sample Output

30
 #include<iostream>
#include<math.h>
#include<malloc.h>
using namespace std; int num=; typedef struct Tree
{
int val;
int max;
struct Tree*left;//左分支节点
struct Tree*right;//右分支节点
struct Tree*sib;//兄弟节点
struct Tree*next;//linenumber
struct Tree*pre;//前继行
}Tree,*TreeNode; TreeNode first; void construction(int i,int j,int loc,int col)//构造树形结构
{
int linenum;
linenum=j;//return the linenumber; int k;
if(linenum==)
first->val=i;
else{
TreeNode p;
p=first; /* for(k=1;k<linenum-1;k++)//锁定行
{
p=p->next;
}*/
while(p->next!=NULL)
p=p->next;//锁定行 TreeNode q;
q=(TreeNode)malloc(sizeof(Tree));
q->val=i;
q->left=NULL;
q->right=NULL;
q->next=NULL;
q->sib=NULL;
//赋值 if(col==)//处理第一列的情况
{
p->next=q;
q->pre=p;
q->sib=NULL;
q->next=NULL; }
else
{
if(col==)
{}
else
{
while(p->sib!=NULL)
{ p=p->sib;
}
} p->sib=q;
q->sib=NULL; } //返回上一行 p=first;
for(k=;k<linenum-;k++)//锁定上一行
{
p=p->next; }
//锁定上一列的位置 for(k=;k<col-;k++)
{ if(p->sib!=NULL)
p=p->sib;
} if(col==)
{ p->left=q; }
else if(col==linenum)//debug
{
p->right=q; } else
{ p->right=q; p=p->sib; p->left=q; } } } void cal(TreeNode p)
{
while(p->next!=NULL)
p=p->next; p=p->pre; TreeNode q,f;
q=p;
while(q!=NULL)
{
f=q;
while(f!=NULL)
{
int m;
m=f->left->val+f->val;
int n;
n=f->right->val+f->val;
if(m>n)
f->val=m;
else
f->val=n;
f=f->sib; }
q=q->pre;
} } int main()
{
int input,m;
first=(TreeNode)malloc(sizeof(Tree));
first->next=NULL;
first->sib=NULL;
first->left=NULL;
first->right=NULL;
first->pre=NULL;
//Initial the first node
cin>>input;
m=input;
int j=;
for(int i=;i<=m;i++)
{
for(int k=;k<=i;k++)
{
int a1;
cin>>a1;
construction(a1,i,j,k);
j++;
}
} cal(first);
cout<<first->val<<endl;
return ;
}

 

数塔问题(DP算法)自底向上计算最大值的更多相关文章

  1. HDU 2084 数塔(简单DP入门)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  2. HDU 2084 数塔 (dp)

    题目链接 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数 ...

  3. hdu----(2084)数塔(dp)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  4. hdu 2084 数塔 (简单dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=2084 数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory L ...

  5. 数塔(dp)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  6. HDOJ.2084 数塔(DP)

    数塔 点我挑战题目 题意分析 DP的思想,自上而下计算. [这几天比较忙 有空补上] 代码总览 /* Title:HDOJ.2084 Author:pengwill Date:2017-1-14 */ ...

  7. HDU-2084 数塔 经典dp,水

    1.HDU-2084   数塔 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 3.总结:从下往上推,最后归于顶点.方程为  dp[i][j] ...

  8. 数字三角形/数塔问题(DP入门题)

    有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一起走到底层,要求找出一条路径,使路径上的值最大. 样例输入: 5 13 11 8 12 7 26 6 14 15 8 12 7 ...

  9. dp入门--poj 1163数塔

                                                                                                        ...

随机推荐

  1. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  2. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

  3. C# 破解 Reflector8.5

    一.分析 破解.net .dll,可以使用reflector,但官方提供的reflector是需要购买的,因此,破解reflector势在必行. 二.破解Reflector具体步骤 下面为详细的破解步 ...

  4. 水印第三版 ~ 变态水印(这次用Magick.NET来实现,附需求分析和源码)

    技能 汇总:http://www.cnblogs.com/dunitian/p/4822808.html#skill 以前的水印,只是简单走起,用的是原生态的方法.现在各种变态水印,于是就不再用原生态 ...

  5. shell简介

    Shell作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. shell使用的熟练程度反映了用户对U ...

  6. 在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误

    1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8   在安装的时候报错: -1ubu1604-amd64.deb 提示: ...

  7. MVC常遇见的几个场景代码分享

    本次主要分享几个场景的处理代码,有更好处理方式多多交流,相互促进进步:代码由来主要是这几天使用前端Ace框架做后台管理系统,这Ace是H5框架里面的控件效果挺多的,做兼容也很好,有点遗憾是控件效果基本 ...

  8. js数组去重几种思路

    在一些后台语言中都内置了一些方法来处理数组或集合中重复的数据.但是js中并没有类似的方法,网上已经有一些方法,但是不够详细.部分代码来源于网络.个人总计如下:大致有4种思路 1)使用两次循环比较原始的 ...

  9. 敏捷软件开发VS传统软件工程

    敏捷软件开发:又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新兴软件开发方法,是一种应对快速变化的需求的一种软件开发能力. 与传统软件工程相比,它们的具体名称.理念.过程.术语都不尽相同 ...

  10. BZOJ 3504: [Cqoi2014]危桥 [最大流]

    3504: [Cqoi2014]危桥 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1407  Solved: 703[Submit][Status] ...