【现代程序设计】【Homework-01】
1维的最大子数组之和
对于1维的最大子数组之和
假设f[i]表示:对于1..i这个序列中,包含i这个元素的最大序列的值
则对于f[i],0<i<=n;
应该有
f[i]=max(a[i],f[i-1]+a[i]);
f[1]=a[1];
由此一维的问题即可解决
时间复杂度:O(n);
空间复杂度:O(n);
2维的最大子数组之和
为了叙述的方便,在此我们先约定,输入的矩阵为P,行和列值分别约定为m,n
对于2维数组,我们虽然无法直接使用1维中的动态规划的思路
但是,如果我们可以把一整行看做一个元素
按照1维的思路,我们就可以得到一个最大的m*x的矩阵A,0<x<n
显然A不一定是最后的答案,因为矩阵A的行值被我们限定为了m
所以我们需要枚举m,即m←1..m
之后要做的就很简单了
枚举行值等于m,列值恒定为n的所有矩阵D,并找出D中的最大子矩阵E
对于所有的E,max(E)就是最后的答案
时间复杂度=T[求1维最大子数组]*T[枚举矩阵]*T[计算矩阵每一行的值]
前者已知为O(n)
枚举矩阵则需要一个二重的循环,即为O(n^2)
对于计算矩阵D中没一行的值
我们可以进行预处理
假设D在P中的位置为:第x列→第y列
如果我们用一个数组g[i][j]表示:第i行的1..j列的元素之和为g[i][j];
则对于D中的每一行的和应该为g[i][y]-g[i][x],(0<i<=m)
每次计算的复杂度为O(1)
所以总的时间复杂度为:O(N^3)
空间复杂度:
主要用于存储P,D,E
为:O(n^2);
曲面2维的最大子数组之和
曲面和平面最本质的区别就是:边缘的连续问题
所以我们只需要增加3个矩阵P1,P2,P3,排列为:
P P1
P2 P3
求解其中和最大的子矩阵E即可
但对于E,行列值均应分别小于m,n;
时间空间复杂度均和2维平面最大子数组之后的复杂度相同
时间复杂度:O(n^3);
空间复杂度:O(n^2);
以下是作业所需要包含的必要的东西
开发时间:30min
效率:不知道该如何描述
心得:第一次写Blog,把自己所想的准确的表达出来,也不是想象中那么简单
截图:这是一个在线OJ的评测截图,因为有个题目和这个一样,所以我就偷了个懒,没有自己写测试数据 : ]
下面是二维平面最大子数组的源码,由于比较简短,我也就没有做过多的注释
如果有不明白或者觉得本人写的代码不够简洁或者有误,也欢迎各位留言
#include<stdio.h>
#define M 100
#define max(a,b) (a)>(b)?(a):(b) /* 由于比较懒,在此我先预处理了P的所有子矩阵的,每一行的值 所以开销为O(n^3) 但此算法的空间复杂度是可以为o(n^2)的 但需要每次初始化一下数组的值 所以我就比较懒的开了个O(n^3)的复杂度 : ] */ int f[M][M][M],g[M][M][M],a[M][M],i,j,k,l,n,m; main()
{
//输入
scanf("%d%d",&m,&n);
for(i=;i<m;i++)
for(j=;j<n;j++)
scanf("%d",a[i]+j); //预处理矩阵每一行的值
for(i=;i<m;i++)
for(j=;j<n;j++)
for(k=j;k>=;k--)
g[i][j][k]=g[i][j][k+]+a[i][k]; //C中,防止指针值越界,而提前处理初值
for(i=;i<n;i++)
for(j=;j<=i;j++){
f[][j][i]=g[][j][i];
l=max(l,f[][i][j]);
} //求解过程
for(i=;i<m;i++)
for(j=;j<n;j++)
for(k=;k<=j;k++){
f[i][j][k]=max(g[i][j][k],f[i-][j][k]+g[i][j][k]);
l=max(l,f[i][j][k]);
} printf("%d",l); }
【现代程序设计】【Homework-01】的更多相关文章
- 阅读摘录《javascript 高级程序设计》01
前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了 ...
- javascript高级程序设计--笔记01
概述 JavaScript的实现包含三个部分: 1 核心(ECMAScript) 提供核心语言功能 2 文档对象模型(DOM) 一套提供了访问以及操作网页内容的API 3 浏览器对象模型( ...
- 标准C程序设计七---01
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 现代程序设计homework——04
题目: 详见:http://www.cnblogs.com/xinz/p/3341551.html 题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话.确实, ...
- Using Vertex Texture Displacement for Realistic Water Rendering
http://blog.csdn.net/soilwork/article/details/709869 Using Vertex Texture Displacement for Realistic ...
- 软工+C(9): 助教指南,持续更新...
上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...
- 20145218 《Java程序设计》第01次实验报告
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.08 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实 ...
- 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB
走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...
- 20145219 《Java程序设计》第01周学习总结
20145219 <Java程序设计>第01周学习总结 教材学习内容总结 软件分类:系统软件(DOS.Windows.Linux等).应用软件(扫雷.QQ等) 人机交互方式:图形化界面.命 ...
- HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))
度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
随机推荐
- [Ruby on Rails系列]2、开发环境准备:Ruby on Rails开发环境配置
前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完成Ruby on Rails开发环境的配置. 在配置环 ...
- java内存模型分析2
不同线程之间无法直接访问对方工作内存中的变量,线程间变量值的传递均需要在主内存来完成,线程.主内存和工作内存的交互关系如下图所示,和上图很类似. 这里的主内存.工作内存与Java内存区域的Java堆. ...
- Linux 下常用命令
linux 下常用命令: 1.删除文件命令为 rm 2.创建目录的命令是:mkdir 3.删除目录的命令是rmdir(空目录) 4.切换到root帐号:su 5.查看所有进程:ps -aux 6.杀死 ...
- 在Oracle 11g r2中,EXP无法导出个别空的表
在Oracle 11g r2中,发现传统的exp无法不能导出空的表,上网搜索了一下找到了原因. 主要是Oracle 11g 新增了一个参数:deferred_segment_creation,含义是段 ...
- open/write/read
C语言中open函数 作用:打开和创建文件. 简述: 1 2 3 4 #include <fcntl.h> int open(const char *pathname, int flags ...
- Oracle 列顺序测试
列顺序测试 大家在做表设计的时候通常对表中列的排列顺序没有过多注意,但是其实越常用的列,它的位置越靠前,则查询速度越快. 因为每个block里面存储了row directory (每行数据在块中的位移 ...
- 关于web会话中的session过期时间的设置
关于web会话中的session过期时间的设置 1.操作系统: 步骤:开始——〉管理工具——〉Internet信息服务(IIS)管理器——〉网站——〉默认网站——〉右键“属性”——〉主目录——〉配置— ...
- Hibernate映射之实体映射<转载>
实体类与数据库之间存在某种映射关系,Hibernate依据这种映射关系完成数据的存取,因此映射关系的配置在Hibernate中是最关键的.Hibernate支持xml配置文件与@注解配置两种方式.xm ...
- 转: 解决MSYS2下的中文乱码问题
解决方案 新建/usr/bin/win: 12 #!/bin/bash$@ |iconv -f gbk -t utf-8 新建/etc/profile.d/alias.sh: 12345678 ali ...
- UVa 12171 (离散化 floodfill) Sculpture
题意: 三维空间中有n个长方体组成的雕塑,求表面积和体积. 分析: 我们可以在最外边加一圈“空气”,然后求空气的连通块的体积,最后用总体积减去即是雕塑的体积. 还有一个很“严重”的问题就是5003所占 ...