数塔问题(DP算法)自底向上计算最大值

Input
输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。
Output
对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。
Sample Input
Sample Output
#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算法)自底向上计算最大值的更多相关文章
- HDU 2084 数塔(简单DP入门)
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU 2084 数塔 (dp)
题目链接 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数 ...
- hdu----(2084)数塔(dp)
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- hdu 2084 数塔 (简单dp)
http://acm.hdu.edu.cn/showproblem.php?pid=2084 数塔 Time Limit: 1000/1000 MS (Java/Others) Memory L ...
- 数塔(dp)
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- HDOJ.2084 数塔(DP)
数塔 点我挑战题目 题意分析 DP的思想,自上而下计算. [这几天比较忙 有空补上] 代码总览 /* Title:HDOJ.2084 Author:pengwill Date:2017-1-14 */ ...
- HDU-2084 数塔 经典dp,水
1.HDU-2084 数塔 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 3.总结:从下往上推,最后归于顶点.方程为 dp[i][j] ...
- 数字三角形/数塔问题(DP入门题)
有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一起走到底层,要求找出一条路径,使路径上的值最大. 样例输入: 5 13 11 8 12 7 26 6 14 15 8 12 7 ...
- dp入门--poj 1163数塔
...
随机推荐
- 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!
看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...
- .NET Core全新路线图
.NET Core / ASP.NET Core 1 RTM发布两周后,社区也很积极,收到了非常多的反馈,上周五微软的scott Hunter 在dotnet团队官方博客上发布了.NET Core全新 ...
- 逆天Kali带你游遍大江南北~安全之前人铺路!
0.Linux基础学习(基本指令) http://www.cnblogs.com/dunitian/p/4822807.html 1.Kali安装到移动硬盘或者U盘中~Linux系列通用方法(包括An ...
- ASP.NET Core中如影随形的”依赖注入”[上]: 从两个不同的ServiceProvider说起
我们一致在说 ASP.NET Core广泛地使用到了依赖注入,通过前面两个系列的介绍,相信读者朋友已经体会到了这一点.由于前面两章已经涵盖了依赖注入在管道构建过程中以及管道在处理请求过程的应用,但是内 ...
- ASP.NET Core: You must add a reference to assembly mscorlib, version=4.0.0.0
ASP.NET Core 引用外部程序包的时候,有时会出现下面的错误: The type 'Object' is defined in an assembly that is not referenc ...
- ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存
ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...
- Hadoop学习之旅二:HDFS
本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...
- 去IOE的一点反对意见以及其他
某天在机场听见两老板在聊天,说到他们目前销售的报表老跟不上的问题,说要请一个人,专门合并和分析一些发过来的excel表格,我真想冲上去说,老板,你需要的是一个信息处理的系统,你需要咨询么.回来一直耿耿 ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- Ubuntu设置root用户登录图形界面
Ubuntu默认的是root用户不能登录图形界面的,只能以其他用户登录图形界面.这样就很麻烦,因为权限的问题,不能随意复制删除文件,用gedit编辑文件时经常不能保存,只能用vim去编辑. 解决的办法 ...