北京大学程序设计实习课程

合集下载

《软件工程》第10章 软件维护

《软件工程》第10章 软件维护

北京大学远程教育课程
Software Engineering_Chapter10-2
问题定义
计划 时期 可行性论证 及软件计划
需求分析
概要设计 开发 时期
详细设计Байду номын сангаас
编码
测试 运行时期 运行/维护
北京大学远程教育课程
Software Engineering_Chapter10-3
本章主要内容
• 10.1 软件维护的定义,目标与任务 • 10.2 软件维护的类型 • 10.3 软件的可维护性
北京大学远程教育课程
Software Engineering_Chapter10-13
10.2.1 改正性维护(续)
• 实践表明,软件测试和排错不可能完全暴露并改正一个大 型软件系统中的所有错误。 • 经过统计分析,在典型的市场销售的软件包中,还有缺陷 的代码行约占代码总行数的3%。正式投入使用的软件中 含有错误是不足为奇的,即使是已运行多年的软件。 • 改正性维护举例:
北京大学远程教育课程
Software Engineering_Chapter10-6
10.1.3 软件维护的任务
• 一个软件开发机构60%的精力用在维护现有的软件上。随 着产品的增加,这个比例还将不断提高。不仅当前的软件 版本要维护,仍在使用的旧版本和即将投入使用的新版本 也将需要维护。 • 在软件整个运行周期中,不仅要解决原有问题,还要解决 修改过程中产生的新问题。因此软件维护是一个无穷尽的 过程。
Software Engineering_Chapter10-18
10.2.4 预防性维护
• 维护人员不要单纯等待用户提出维护的请求,而应该选择 那些还能使用数年、目前虽能运行,但不久就须作重大修 改或加强的软件,进行预先的维护。预防性维护可以改善 软件的可维护性,减少今后对它们维护时所需要的工作量。

北京大学数学系课程表

北京大学数学系课程表
110
1-16
3-4
7-8单周
20111228
00131420
数据结构 Data Structures
1
全校必修
3.0
51.0
3.0
孙猛
本科(公费)
180
1-16
1-2单周
3-4
20120106
00131420
数据结构 Data Structures
2
全校必修
3.0
51.0
3.0
牟克典
本科(公费)
90
1
专业必修
5.0
102.0
6.0
伍胜健
本科(公费)
132
1-16
3-4
1-2
20111230
00132301
数学分析(I) Mathematical Analysis (I)
2
专业必修
5.0
102.0
6.0
张 宁
本科(公费)
130
1-16
3-4
1-2
20111230
00132304
数学分析 (III) Mathematical Analysis (III)
任选
3.0
54.0
3.0
夏壁灿
本科(公费)
20
1-16
7-9
00113840
临床试验设计与分析 Clinical trial design and analysis
1
任选
3.0
51.0
3.0
本科(公费)
20
1-16
10-12
00113850
临床试验SAS高级编程 SAS Programming in Clinical Trials

北京大学信息科学技术学院

北京大学信息科学技术学院

北京大学信息科学技术学院智能科学与技术专业一、专业简介智能科学与技术专业是北京大学智能科学系在2003年提出,同年获北京大学和教育部批准成立的,于2004年开始招收本科学生。

智能科学与技术专业是计算机科学与技术一级学科之下的本科专业,主要从事机器感知、智能机器人、智能信息处理和机器学习等交叉学科领域的学习。

本专业为理科专业,学制4年,毕业授予理学学士学位。

二、专业培养要求、目标具有坚实的数学、物理、计算机和信息处理的基础知识以及心理生理等认知和生命科学的多学科交叉知识,系统地掌握智能科学技术的基础理论、基础知识和基本技能与方法,受到良好的科学思维、科学实验和初步科学研究的训练,具备智能信息处理、智能行为交互和智能系统集成方面研究和开发的基本能力。

能够自我更新知识和不断创新,适应智能科学与技术的迅速发展。

在个人方面,具有全面的文化素质、良好的知识结构和较强的适应新环境、新群体的能力,并具有良好的语言(中、英文)和计算机运用能力。

本科毕业后能够在研发部门、学科交叉研究机构以及高校从事与智能科技相关领域的科研、开发、管理或教学工作,并可继续攻读智能科学与技术专业以及相关学科和交叉学科的硕士和博士学位。

三、授予学位理学学士四、学分要求与课程设置总学分:140学分,其中:1.必修课程:88学分(2)全院必修课程:25 学分2.(1)专业方向核心课程:18学分说明:要求在下列一组智能科学与技术专业方向核心课程中至少选择18学分课程。

并集(2)专业选修课:至少12学分要求学生至少修满12学分的专业选修课。

可以从下述智能科学技术类中选择。

(3)本科素质教育通选课:16学分对本科生来说,除选修课一览表所列课程外,还可以选修学校其他专业相关课程。

但是,如果选择课程在本专业课程中有相似的课程,其课程难易程度必须高于本专业同类课程,方可选择。

3.毕业论文:6学分智能科学系教师基本情况北京大学智能科学与技术专业本科生课程年度安排(2005,4,27)8 / 9课共46学分(包括专业方向核心课18学分,素质教育通选课16学分,专业选修12学分)。

贯穿在系列课程中的程序设计能力的培养

贯穿在系列课程中的程序设计能力的培养

贯穿在系列课程中的程序设计能力的培养摘要:本文就培养学生的程序设计能力问题进行了分析,给出了教学实践中的解决方案。

对教学理念、教学方法、考核方式进行了探讨。

在教学理念上,强调在一系列课程中持续不断的系统化训练。

在教学方法上,采用面向专业应用的分类教学,贯彻“案例驱动”、强化实训等。

本文还就考试方法的改革及资源网站的建设提出了一系列观点,希望能够更好地培养学生的程序设计能力。

关键词:程序设计能力;教学理念;教学方法程序设计能力对学生来说不仅是职业技能的需要,也体现着创造性思维的信息素质培养。

程序设计正是有形地表达抽象思维的方法,在程序设计过程中贯穿阅读判断、分析思考、工具利用、抽象表达、综合创造等多项技能,对创新性人才素质的培养至关重要。

一、目前现状学生普遍反映对于抽象的C程序设计语言学习起来很困难。

根据多年的教学经验,刚开始学习该课程学生有很大的热情,但随着学习的深入,到了循环、数组部分,有些学生仍然迟迟不能入门,慢慢地失去了学习的兴趣,开始掉队,最终甚至放弃了该科目的学习。

造成这种情况的原因是多方面的,但其中很重要的一个方面就是长期以来程序设计课程过多强调语言细节及其表达细节,忽视了程序设计的本质,忽略了算法设计。

另外,由于上机实践教学学时偏少,仍然以教师讲授为主,学生学习该科目目的不明确,没有针对性,缺乏兴趣,教学方法过于传统和死板等因素,学生不仅没有掌握基本的程序设计方法,而且对后续以此为基础的课程的学习产生了严重的影响。

二、教学理念编程能力的培养不能仅仅依赖于一门程序设计课程,它需要在一系列课程中实践、实践、再实践,通过持续不断的全方位训练才得以培养提高。

1.在第一门基础课程中培养程序设计初步知识在学生入学第一门计算机课程“大学计算机基础”中,增加“算法和程序设计”,特别是程序设计密切相关的常用算法及设计内容,如:求最大(小)值、求和、求积、排序、查找、程序设计方法、数据结构等。

以上这些算法都是程序设计中常用的基本算法,采用结构化程序设计中三种基本结构给出流程图,学生非常容易理解,这部分内容在中学信息技术相关课程中是没有的,学生学到新的知识也格外感兴趣。

北大2009本科生教学手册(信科)

北大2009本科生教学手册(信科)

3
3
开课 学期
二下
4
3 三上
限选课程 (11 - 17学分 )
课程号
课程
周学时 学分
04830110 数字逻辑设计实验 4
2
04830130 微机实验
4
2
体系结构实验班
2
2
04830170 数据结构与算法实 4
2

04830180 编译实习 04830190 操作系统实习 04830240 计算机网络概论

04830230 计算机图形学 04830290 面向对象技术引

04830320 数字图像处理 04830310 人机交互 04830410 信息安全引论 04830210 软件工程 04831800 数字媒体技术基
周学 学分 时
3
3
3
3
2
2
3
3
2
2
3
3
2
2
2
2
3
3
2
2
开课 学期 四上
三下 三上
04031682 马克思主义基本原 2 2 理概论(下)
04031660 近现代史纲要
22
60730020 军事理论
22
―――― 体育系列课程
-4
开课 学期 秋季 全年 全年 全年 全年
全年
秋季
春季
全年
2.大类平台课程:20-31学分 必修课程:20学分
课程号
课程名称
00130201 高等数学(I) 00130202 高等数学(II) 00101460 线性代数 00431141 力学B
计算机网络实习
4
2
4

Java程序设计课程中混合教学模式的探讨

Java程序设计课程中混合教学模式的探讨

Java程序设计课程中混合教学模式的探讨郭峰,孙晶,童立靖(北方工业大学,北京100144)摘要:Java程序设计是计算机及相关专业的一门重要课程,传统的以教师为主导的教学模式难以激发学生的学习兴趣。

本文提出一种结合翻转课堂、同伴教学和项目驱动的混合教学模式,并在北方工业大学Java程序设计课程的教学过程中应用,取得了良好的教学效果。

关键词:翻转课堂;同伴教学;项目驱动;混合教学模式;Java程序设计中图分类号:G642文献标识码:A文章编号:1009-3044(2021)07-0102-02开放科学(资源服务)标识码(OSID):Discussion on mixed Teaching Mode in Java Programming CourseGUO Feng,SUN Jing,TONG Li-Jing(North China University of Technology,Beijing100144,China)Abstract:Java programming is an important course for computer and related majors.The traditional teacher led teaching mode is difficult to stimulate students'interest in learning.In this paper,a mixed teaching mode combining flipped classroom,peer instruc⁃tion and project driven is proposed and applied in the teaching process of Java programming course in North University of technolo⁃gy,and good teaching effect is achieved.Key words:Flipped Classroom;Peer Instruction;Project Driven;mixed teaching mode;Java Programming1引言围绕着Java语言已经形成一个完整庞大的应用生态圈,以JDK为技术核心的大量框架、平台、工具,无论是在传统的软件开发领域还是在深度学习、云计算、大数据、物联网、区块链等近年来的热点领域,都发挥着重要的作用。

北京大学信息管理系

北京大学信息管理系一、信息管理系简介信息管理系始建于1947年,著名目录学家王重民先生在时任北京大学校长胡适的支持下设立,是我国自己创办的最早的图书馆学情报学与信息管理专业教育机构之一。

其前身是图书馆学系,1987年5月改名为图书馆学情报学系,1992年改为现名。

其中图书馆学为国家重点学科,情报学为北京市重点学科,信息管理与信息系统为教育部重点建设的特色专业,拥有一级学科博士和硕士学位授予权,并设有博士后流动站。

本科设有两个专业:信息管理与信息系统、图书馆学。

按系招生,文理兼收,入学后第三年自主选择专业。

现有教职员34人,其中教授13人(含博士生导师9人),副教授13人,讲师2人。

图书馆学博士生导师5人,情报学博士生导师4人,兼职博士生导师2人。

另外,聘有外籍客座教授3人,国内兼职教授7人。

二.专业及专业方向:1)信息管理与信息系统专业信息管理与信息系统专业准予毕业的总学分为148学分,其中1)必修课:87学分;2)选修课:54学分;3)毕业论文:6学分;2)图书馆学专业图书馆学专业准予毕业的总学分为148学分学分,其中1)必修课:87学分;2)选修课:54学分;3)毕业论文:6学分;2.专业代码:三、教学行政管理人员职务姓名办公电话系主任王余光 62756907 主管教学副主任周庆山62755677 教务员石晓华62751680 四、师资力量(姓名前打*者为博士生导师)五、教学设备与设施1.教学与研究实验室教研室:图书馆学教研室,情报学教研室。

实验室:数字图书馆开放实验室,中国人搜索行为实验室,智能信息服务实验室,自动分类实验室等。

实习室:工具书实习室。

2.图书资料3. 研究基地:国家信息资源管理北京研究基地。

4. 研究所:信息传播研究所,信息化与人类信息行为研究所中文图书(册) 论文 (册) 外文图书 (册)中文期刊 (册) 外文期刊 (册) 报纸(种)中 文 13304 2453 11456 7 外 文 684 2963 图书总量 16441期刊总量 14419总藏书量30860北京大学信息管理系信息管理与信息系统专业一、专业简介信息管理与信息系统专业于1998 年全国高等学校本科专业目录调整之后成立,由原来的管理信息系统、科技信息、经济信息管理等专业合并组建而成。

北京大学课程表

100
1-18
11-12
中国通史(近代部分)
通选课
2.0
34.0
2.0
房德邻
本科(公费)
160
1-16
9-10
世界通史(下)
通选课
3.0
51.0
3.0
董正华
本科(公费)
160
1-16
9-10双周
11-12
中国传统官僚政治制度
通选课
2.0
34.0
2.0
阎步克
本科(公费)
163
1-16
11-12
与叶炜老师合上
3-4
中文工具书及古代典籍概要
通选课
2.0
34.0
2.0
刘瑛
本科(公费)
50
1-18
9-10
汉语和汉语研究
通选课
2.0
34.0
2.0
陆俭明
本科(公费)
100
1-18
9-10
《论语》《孟子》导读
通选课
2.0
34.0
2.0
王丽萍
本科(公费)
100
1-18
5-6
台湾文学
通选课
2.0
36.0
2.0
计璧瑞
本科(公费)
150
1-17
7-8
中国政治与政府过程
通选课
2.0
34.0
2.0
徐湘林
本科(公费)
100
1-17
11-12
台湾问题与中华民族的复兴
通选课
2.0
34.0
2.0
姚礼明
本科(公费)
100
1-17
11-12

北京大学计算机学科的教学体系改革

北京大学计算机学科的教学体系改革摘要:信息科学技术的迅猛发展及广泛应用,以及其中相关学科的交叉融合发展趋势,在给人类社会带来革命性变化的同时,也给信息科学技术人才的培养带来了挑战。

上世纪中晚期制订的大学课程体系已经不能适应当前信息科学技术发展的要求,有必要进行系统化的改革。

本文简要介绍北京大学信息科学技术学院在计算机学科进行的教学体系改革。

关键词:信息科学技术;教学改革;教学理念;计算机学科北大信息科学技术学院针对北大学生的特点,把培养目标定位在培养具有国际视野的领域领军人才上,具体讲就是培养具有原创能力的研究型人才、具有集成能力的工程型人才和具有组织能力的管理型人才。

为了实现上述培养目标,学院秉承了北京大学“加强基础,淡化专业,因材施教,分流培养”的理念,在教学改革中强调了“拓宽夯实知识基础,培养锻炼综合能力”的基本原则,关注了如下三方面的工作:一是结构化的教学体系框架设计:构筑能够灵活调整课程安排、教学内容和教学形式的教学体系框架,适应本学科发展迅速和与产业结合紧密的特点。

二是宽广和扎实结合的基础课程设置:依托北大的人文学科优势培养学生的人文基础,依托北大的理科优势夯实数学物理基础。

依托北大计算机学科的历史积淀强化算法和软件编程基础,依托学院的电子科学技术学科加强硬件基础。

三是面向能力培养的学习环境建设:营造敢于表达、质疑、挑战、犯错和承担的学术氛围,建设面向基础知识和动手能力的实验教学课程体系,建立结合真实科研任务的、与研究生同等条件的科研实习制度。

本文将对这些前期教改实践做一个简要总结。

一、结构化的教学体系框架设计信息学院目前有四个本科生专业,分别为计算机科学与技术、电子学、微电子学和智能科学。

其中前三个是成立学院时就有的专业,而第四个是学院成立后设立的全国第一个智能科学专业。

在原有的教学体系中,每个专业的课程自成体系。

一方面每个专业的学生知识面较窄,不利于学生适应快速发展的社会需求;另一方面有些课程在不同专业重复设置,浪费教学资源。

Java程序设计第一章课件

编译 编译型源程序 可执行程序EXE 连接 编译 执 行 操 作 系 统
Java源程序 .java
字节码程序 .class
解释 执行
解 释 器
裸 机
Java虚拟机 计算机科学与工程系Βιβλιοθήκη 111.1 Java语言简介
Java虚拟机
Java虚拟机是一种利用软件方法实现的抽象化 的计算机,基于下层的操作系统和硬件平台, 可以在上面执行Java的字节码程序
Java的基本特点1-1
简单 面向对象 分布式
Java的风格类似于C++,因而对 C++程序员而言非常容易掌握Java 编程技术 Java摒弃了C++中容易引发程序错 误的地方,如指针操作和内存管理 在Java 中任何东西都是对象, 因此,重点集中在数据以及应 用程序中的数据操作方法 Java提供了包容广泛的例程库,可处理 像HTTP和FTP这样的TCP/IP协议。Java应 用程序可通过一个特定的URL来打开并访问 对象,就像访问本地文件系统那 样简单
javac java appletviewer
计算机科学与工程系 19
总结3-4
类是对象的描述

类描述每一个对象的都包含的数据 类描述每一个对象所展示的行为 类是对象的蓝图 它是对象被创建的模型或模版
对象有:
状态(state)—— 特征描述 行为(behaviors)—— 它能做什么(或能对它 做什么)
计算机科学与工程系 12
1.1 Java语言简介
Java
运行环境(JRE)
编译时 .java
(源代码) 网络 字节码校验器 解释器 硬件
运行时
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
24
北京大学《程序设计实习》课程
算法1:递归
#include <iostream.h> #include <string.h> #define MAX 1000 char str1[MAX], str2[MAX]; int commonstr(int,int); void main(){ while(cin>> str1 >> str2){ intlen1=strlen(str1); intlen2=strlen(str2); cout<<commonstr(len1-1,len2-1); cout<<endl; } }
23
北京大学《程序设计实习》课程
算法1:递归
设两个字符串分别是 char str1[MAXL]; 长度是len1 char str2[MAXL]; 长度是len2 设f(str1,len1,str2,len2)为str1和str2的最大公共子 串的长度,则可以对两个字符串的最后一个字 符的情况进行枚举:
25
北京大学《程序设计实习》课程
算法1:递归
int commonstr(int len1,int len2){ if(len1==-1 || len2==-1) return 0; if(str1[len1]==str2[len2]) return 1+commonstr(len1-1,len2-1); else{ int tmp1=commonstr(len1-1,len2); int tmp2=commonstr(len1,len2-1); if(tmp1>tmp2) return tmp1; else return tmp2; } }
if( r == 0 ) MaxSum(r,j) = D[0][0]; else MaxSum(r,j) = Max(MaxSum(r-1,j-1), MaxSum(r-1,j)) + D[r][j];
19
北京大学《程序设计实习》课程
由于两重循环形式为: for( r = 0 ; r < N ; r ++) for( j = 0 ; j < r+1 ; j ++ ) { ……….. } r,j不断递增,所以实际上不需要D[100][100]数组, 每次从文件里读取下一个数字即可。 而每一行的每个MaxSum(r,j)仍然都需要存储起来, 这样,只需要一个Sum[100]数组。 (注:只需设一个临时存储变量,在计算MaxSum(r,j)后写 入数组时,暂存MaxSum(r-1,j) )
给出两个字符串,求出这样的一个最长的公共 子序列的长度
最长的公共子序列:子序列中的每个字符都能在两 个原串中找到,而且每个字符的先后顺序和原串中 的先后顺序一致。
22
北京大学《程序设计实习》课程
最长公共子序列
Sample Input abcfbc abfcab programming contest abcd mnp Sample Output 4 2 0
11
北京大学《程序设计实习》课程
解题思路
以D(r, j)表示第r行第 j 个数字,以MaxSum(r, j) 代表从第 r 行的第 j 个数字到底边的各条路径中, 数字之和最大的那条路径的数字之和,则本题 是要求MaxSum(0,0) 。(假设行编号和一行内 数字编号都从0开始)。 典型的动态规划问题。
POJ 1163
输入格式: 5 //三角形行数。下面是三角形 7 38 810 2744 45265 要求输出最大和
10
北京大学《程序设计实习》课程
解题思路
算法一:递归的想法
设f(i,j) 为三角形上从点(i,j)出发向下走的最长路经, 则 f(i,j) = max(f(i+1,j), f(i+1,j+1)) 要输出的就是f(0,0)即从最上面一点出发的最长路经。
动态规划的实质就是
7
北京大学《程序设计实习》课程
动规的要诀-状态
用动态规划解题,关键是要找出“状态”,和 在“状态”间进行转移的办法(即状态转移方 程) 我们一般在动规的时候所用到的一些数组,也 就是用来存储每个状态的最优值的。
8
北京大学《程序设计实习》课程
动态规划
例2 POJ 1163 数字三角形
6
北京大学《程序设计实习》课程
什么是动态规划?
动态规划的性质
最优化子结构性质。若问题的最优解所包含的子问题的解也是 最优的,则称该问题具有最优子结构性质(即满足最优化原理) 能用动态规划解决的求最优解问题,必须满足最优解的每 个局部也都是最优的 子问题重叠性质。在用递归算法自顶向下对问题进行求解是, 每次产生的子问题并不总是新问题,有些子问题可能被重复计 算多次。动态规划算法利用此性质,对每个子问题只计算一次, 然后将其结果保存起来以便高效重用。
7
3 8 8 1 0 2 7 4 4 4 5 2 6 5
在上面的数字三角形中寻找一条从顶部到底边的路径, 使得路径上所经过的数字之和最大。路径上的每一步都 只能往左下或右下走。只需要求出这个最大和即可,不 必给出具体路径。
三角形的行数大于1小于等于100 数字为 0 - 99
9
北京大学《程序设计实习》课程
16
北京大学《程序设计实习》课程
解法1
如果每算出一个MaxSum(r,j)就保存起来,则可 以用o(n2)时间完成计算。因为三角形的数字总 数是 n(n+1)/2 此时需要的存储空间是:
int D[100][100]; //用于存储三角形中的数字 int Sum[100][100]; //用于存储每个MaxSum(r,j)
5
北京大学《程序设计实习》课程
什么是动态规划?
动态规划是求解包含重叠子问题的最优化方法
基本思想:将原问题分解为相似的子问题,在求解 的过程中通过子问题的解求出原问题的解(注意: 不是简单分而治之)。 只能应用于有最优子结构的问题(即局部最优解能 决定全局最优解,或问题能分解成子问题来求解)。 计算机科学与工程、管理科学(运筹学)等领域中 许多算法的基础,如最短路径、背包问题、项目管 理、网络流优化等。
情况一:str1[len1-1] == str2[len1-1],则 f(str1,len1,str2,len2) = 1+ f(str1,len1-1,str2,len2-1) 情况二:str1[len1-1] != str2[len1-1],则 f(str1,len1,str2,len2) = max(f(str1,len1-1,str2,len2), f(str1,len1,str2,len2-1)) 程序如下:
20
北京大学《程序设计实习》课程
递归到动规的一般转化方法
原来递归函数有几个参数,就定义一个几维的 数组,数组的下标是递归函数参数的取值范围, 数组元素的值是递归函数的返回值,这样就可 以从边界开始,逐步填充数组,相当于计算递 归函数值的逆过程。
21
北京大学《程序设计实习》课程
最长公共子序列 POJ1458
内容提要
为什么要用动态规划的方法 递归程序转化为动态规划程序 例题 作业
2
北京大学《程序设计实习》课程
树形递归
例1:POJ 2753 Fibonacci数列 1,1,…,f(n-1)+f(n-2),… int f(int n){ if(n==0 || n==1) return n; return f(n-1)+f(n-2); }
《程序设计实习》课程 (C++ Programming Practice)
程序设计实习
第九讲 动态规划
主讲教师:田永鸿 yhtian@ /cpp2008/tyh/tyh.htm /jiaoxue-CPP/cpp08.htm 2008年3月24日
f(1) f(0) 1 1
北京大学《程序设计实习》课程
冗余计算
0
4
POJ 2753 Fibonacci数列 int f[n+1]; f[1]=f[2]=1; int i; for(i=3;i<=n;i++) f[i] = f[i-1]+f[i-2]; cout << f[n] <<endl; 用空间换时间 -> 动态规划
超时!! 超时!!
为什么超时?
讨论
14
北京大学《程序设计实习》课程
为什么超时?
回答:重复计算
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
如果采用递规的方法,深度遍历每条路径,存在大 定超时。
15
北京大学《程序设计实习》课程
17
北京大学《程序设计实习》课程
解法2
没必要用二维Sum数组存储每一个MaxSum(r,j), 只要从底层一行行向上递推,那么只要一维数 组Sum[100]即可,即只要存储一行的MaxSum值 就可以。 比解法一改进之处在于节省空间,时间复杂度 不变
18
北京大学《程序设计实习》课程
解法3
能否不用二维数组D[100][100]存储数字呢? 思路:倒过来考虑。前面的思路是从底往上最 终算出MaxSum(0,0)。如果从顶往下算,最终算 出每一个MaxSum(N-1,j),然后再取最大的 MaxSum(N-1,j),不就是答案吗?此时递推公式 为:
12
北京大学《程序设计实习》课程
#include <iostream.h> #define MAX 101 int triangle[MAX][MAX]; int n; int longestPath(int i, int j); void main(){ int i,j; cin >> n; for(i=0;i<n;i++) for(j=0;j<=i;j++) cin >> triangle[i][j]; cout << longestPath(0,0) << endl; } int longestPath(int i, int j){ if(i==n-1) return triangle[i][j]; int x = longestPath(i+1,j); int y = longestPath(i+1,j+1); if(x<y) x=y; return x+triangle[i][j]; }
相关文档
最新文档