第三章实践

1.实践题目
数字三角形

2.问题描述
给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。

3.算法描述
递归式为:b[i][j]=max(b[i+1][j]+a[i][j],b[i+1][j+1]+a[i][j])
从下往上加,比较相邻两个数大小,加上大的那个数,填入记录的数组中,不断以此类推。

4.算法时间及空间复杂度分析(要有分析过程)
时间复杂度:主体为两个for循环,所以时间复杂度为O(n^2)
空间复杂度:n^2

5.心得体会(对本次实践收获及疑惑进行总结)
一开始没有运用到动态规划的思想,用了大量的判断和循环。后来经老师提醒,改变了思路,把递归式推了出来,问题就迎刃而解了。所以以后再遇到这种最优解的情况,应首先考虑动态规划算法。

原文地址:https://www.cnblogs.com/mljtb/p/9906139.html

时间: 2024-10-07 16:46:49

第三章实践的相关文章

【实践报告】算法第三章实践报告

1.实践题目 7-2最大子段和 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时,定义子段和为0. 要求算法的时间复杂度为O(n). 2.问题描述 输入格式: 输入有两行: 第一行是n值(1<=n<=10000): 第二行是n个整数. 输出格式: 输出最大子段和. 输入样例: 在这里给出一组输入.例如: 6 -2 11 -4 13 -5 -2 输出样例: 在这里给出相应的输出.

第三章实践报告

实践题目:数字三角形 题目描述: 设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大. 算法描述:从下至上依次左右比较,大的那方和上面的数相加,直至第一列. 算法时间和空间复杂度分析:因为用到了双重循环,所以时间复杂度为o(n^2),同时使用了二维数组,所以空间复杂度也是o(n^2). 心得:这道题用从下至上的方法比较简单,要有逆向思维. 原文地址:https://www.cnblogs.com/ewerin/p/9943461.ht

第三章实践心得

1.问题描述: 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大. 2.算法描述: for(i=1;i<=n;i++){    for(j=1;j<=i;j++){     cin>>a[i][j]; }  } for(j=1;j<=n;j++)       dp[n][j]=a[n][j];    for(i=n-1; i>=1; i--)    {   

算法第三章实践报告

1.最大子段和. 2.给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时,定义子段和为0. 要求算法的时间复杂度为O(n). 3. #include<iostream>using namespace std; int maxi(int a[],int n){ int sum,maxsum; int i; sum=maxsum=0; for(i =0;i<n;i++) { s

《Python编程快速上手+让繁琐工作自动化》第三章实践项目

1 Collatz 序列 编写一个名为 collatz()的函数,它有一个名为 number 的参数.如果参数是偶数,那么 collatz()就打印出 number // 2,并返回该值.如果 number 是奇数,collatz()就打印并返回 3 * number + 1. 然后编写一个程序,让用户输入一个整数,并不断对这个数调用 collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到 1!既使数学家也不能确定为什么.你的程序在研究所谓的"

算法第三章实践

1. 问题: 所以问题的核心是:如何找到最优路径,得到最大的和? 2. 思路:我一开始的思路是,从顶点开始,比较左右两点的大小,然后取最大值的完事了. 然后结果是28. 为什么呢?原来判断到8的时候,会往右走,但是最大值的路径在最左边的,只要往右走了就无法得到最大值. 3. 算法:最后看了网上的博客,看着c++用python打了一遍,(不过是从山脚下开始的,跟oj的热身赛一样). for i in range(num-1, 0, -1): i -= 1 for n in range(i): if

第三章实验报告

第三章实践报告 一.实践题目 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大. 输入格式: 输入有n+1行: 第 1 行是数字三角形的行数 n,1<=n<=100. 接下来 n行是数字三角形各行中的数字.所有数字在0..99 之间. 输出格式: 输出最大路径的值. 输入样例: 在这里给出一组输入.例如: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输出样例:

Arduino从基础到实践第三章练习题

先写在这里,还没经过测试. 1. LED两端往中间移动,到中间后向两边返回. 1 // adr301.ino 2 3 byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; 4 int ledDelay(65); 5 int direction = 1; 6 int currentLED = 0; 7 unsigned long changeTime; 8 9 void setup() { 10 for(int i=0; i<10; i++){ 1

Learn Prolog Now 翻译 - 第三章 - 递归 - 第四节,更多的实践和练习

在学习了前三章内容后,我们应该对Prolog编程有了直观和理性的认识.由于合一.变量初始化.证明搜索和递归都是Prolog的核心概念,所以有如下更多的一些实践和练习. 这里我会先录入题目,后期再给出我自己的程序代码和一些思考. 实践1 试想有如下的描述迷宫的知识库.其中的事实描述了点和点之间的联通关系,即connected/2谓词逻辑给出了这样的事实:迷宫中能从参数1的点,直接到达参数2的点.而且, 联通关系是有方向的.单向不能往返的: connected(1,2). connected(3,4