acm专题三1006

Problem Description

在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:<br><br>有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?<br><img src=../data/images/2084-1.jpg><br>已经告诉你了,这是个DP的题目,你能AC吗?

Input

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

Output

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

Sample Input

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

(1)题目大意:

本题讲述的是经典数塔问题,就是相邻的可以走,从顶层到底层,哪条路线权值相加是最大的。

(2)思路:  有两种,一种是从上到下的走法,还有一种是从下到上的。我这里是从下到上的,因为这个更简便。用一个二维数组存储该结构,我们发现从下到上,k层的每个值都对应k+1层的相邻两个值。所以我们取二者最大的给k层。以此类推,循环进行下去,第一层的值就是所有路径最大值,槪题有点像贪心算法。

(3)感想:

题目简单,但是得需要仔细。对于一样的题,任何方法可能都可以实现,但是步骤不一样,因而就会有最优的,比如数塔,可以从上到下,但是你要判断边界问题,代码不但长,而且运算时间夜场,不是最优的,相对的从下到上就更简单方便。

(4)代码:

#include<iostream>

using namespace std;

int main()

{

int n, m, c;

int a[100][100];//建立一个二维数组

cin >> c;//要测试的组数

int max(int m, int n);

while (c--)

{

cin >> n;//每组的行数

for (int i = 0;i < n;i++)

{

for (int j = 0;j <= i;j++)

{

cin>>a[i][j];//插入数据

}

}

//从下往上的加

for (int j = n - 2; j >= 0;j--)

{

for (int i = 0;i <= j;i++)

{

a[j][i] += max(a[j+1][i], a[j+1][i+1]);

}

}

cout << a[0][0] << endl;

}

return 0;

}

int max(int m, int n)

{

return m > n ? m : n;

}

时间: 2024-10-06 00:41:35

acm专题三1006的相关文章

分析Linux磁盘管理与文件系统专题三

1.前言 紧接着我的上一篇博客进行磁盘管理操作: http://zhangfengzhe.blog.51cto.com/8855103/1430531 我们已经对磁盘进行了分区,信息如下: [[email protected] ~]# fdisk -l /dev/sdb Disk /dev/sdb: 1073 MB, 1073741824 bytes 255 heads, 63 sectors/track, 130 cylinders Units = cylinders of 16065 * 5

[C# 网络编程系列]专题三:自定义Web服务器

转自:http://www.cnblogs.com/zhili/archive/2012/08/23/2652460.html 前言: 经过前面的专题中对网络层协议和HTTP协议的简单介绍相信大家对网络中的协议有了大致的了解的, 本专题将针对HTTP协议定义一个Web服务器,我们平常浏览网页通过在浏览器中输入一个网址就可以看到我们想要的网页,这个过程中浏览器只是一个客户端,浏览器(应用层应用程序)通过HTTP协议把用户请求发送到服务端, 服务器接受到发送来的HTTP请求,然后对请求进行处理和响应

UI标签库专题三:JEECG智能开发平台 FormValidation(表单提交及验证标签)

?? 1. FormValidation(表单提交及验证标签) 1.1.  参数 属性名 类型 描述 是否必须 默认值 action string 表单提交路径 否 null formid string 表单唯一标示 是 formobj refresh boolean dialog为true时是否刷新父页面 否 true callback string 表单提交完成后的回调函数 否 null beforeSubmit string 表单提交前的处理函数 否 null btnsub string

搜索引擎算法研究专题三:聚集索引与非聚集索引介绍

搜索引擎算法研究专题三:聚集索引与非聚集索引介绍 聚集索引介绍 在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同.表只能包含一个聚集索引. 如果不是聚集索引,表中各行的物理顺序与键值的逻辑顺序不匹配.聚集索引比非聚集索引有更快的数据访问速度. 聚集索引通常可加快 UPDATE 和 DELETE 操作的速度,因为这两个操作需要读取大量的数据.创建或修改聚集索引可能要花很长时间,因为执行这两个操作时要在磁盘上对表的行进行重组. 可考虑将聚集索引用于: 1.包含数量有限的唯一值的列,如 s

专题三--1017

题目 Many years ago , in Teddy's hometown there was a man who was called "Bone Collector". This man like to collect varies of bones , such as dog's , cow's , also he went to the grave -The bone collector had a big bag with a volume of V ,and along

ACM专题

密码:gzhuacm512 喝茶补番码专题之五十二:数论补充 喝茶补番码专题之四十九:容斥原理和莫比乌斯 喝茶补番码专题之二十九:插头DP 喝茶补番码专题之二十七:数位DP 喝茶补番码专题之二十五:polya 喝茶补番码专题之十二:组合数学基础 数学训练六 概率/期望 数学训练三 数学训练二 counting

[.NET领域驱动设计实战系列]专题三:前期准备之规约模式(Specification Pattern)

一.前言 在专题二中已经应用DDD和SOA的思想简单构建了一个网上书店的网站,接下来的专题中将会对该网站补充更多的DDD的内容.本专题作为一个准备专题,因为在后面一个专题中将会网上书店中的仓储实现引入规约模式.本专题将详细介绍了规约模式. 二.什么是规约模式 讲到规约模式,自然想到的是什么是规约模式呢?从名字上看,规约模式就是一个约束条件,我们在使用仓储进行查询的时候,这时候就会牵涉到很多查询条件,例如名字包含C#的书名等条件.这样就自然需要引入规约模式了.规约模式的作用可以自由组装业务逻辑元素

[Asp.net 开发系列之SignalR篇]专题三:使用SignalR实现聊天室的功能

一.引言 在前一篇文章中,我向大家介绍了如何实现实现端对端聊天的功能的,在这一篇文章中将像大家如何使用SignalR实现群聊这样的功能. 二.实现思路 要想实现群聊的功能,首先我们需要创建一个房间,然后每个在线用户可以加入这个房间里面进行群聊,我们可以为房间设置一个唯一的名字来作为标识.那SignalR类库里面是否有这样现有的方法呢?答案是肯定的. // IGroupManager接口提供如下方法 // 作用:将连接ID加入某个组 // Context.ConnectionId 连接ID,每个页

专题三、ArrayList遍历方式以及效率比较

一.遍历方式 ArrayList支持三种遍历方式. 1.第一种,随机访问,它是通过索引值去遍历 由于ArrayList实现了RandomAccess接口,它支持通过索引值去随机访问元素. 代码如下: // 基本的forfor (int i = 0; i < size; i++){    value = list.get(i);} 2.第二种,foreach语句 foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. 代码如下: for (In