第一眼看到这个题目的时候就意识到这道题应该使用动态规划来解决,但因代码能力有限,因此从一维的问题开始解决,用C语言编写,代码如下:

int maxsum(int *p,int size){
int i;
int sum,ans;
sum=;
ans=-;
for(i=;i<size;i++){
if(sum+p[i]<p[i])
sum=;
sum+=p[i];
if(ans<sum)
ans=sum;
}
return ans;
}

p代表数组名字在C语言中即表示数组第一个元素所在的地址。一开始陷入的误区就是认为应该记录之前出现的和最大的字串的结束位置,后同学给予我提示即同时计算size-1个元素中包含最后一个元素的和最大的子串和和最大的子串。当包含最后一个元素的和最大的子串加上整个数组的最后一个元素的和大于原size-1的数字串的最大字串和的话我们就得到了一个更大的子串和,否则保留原来的子串和。 既然明白了一维的情况,那二维的情况就是讲二维转换为一维。即将n行m列的二维数组转换为n^2个长度为m的一维数组。代码如下:时间复杂度为O(m*n^2)

+int maxsum2(int *p,int m,int n){
+ int i,j,k;
+ int temp[m]={};
+ sum=;
+ ans=-;
+ for(i=;i<n;i++){
+ for(j=i;j<n;j++){
+ for(k=;k<m;k++){
+ temp[k]+=p[j][k];
+ if(sum+temp[k]<temp[k])
+ sum=;
+ sum+=temp[k];
+ if(ans<sum)
+ ans=sum;
+ }
+ sum=;
+ }
+ sum=;
+ temp[m]={};
+ }
+ return ans;
+}

因C语言处理输入过于繁琐,并且邹欣老师主张我们多会几门编程语言,因此在室友的激励下,我决定将本次的作业用python实现。

代码如下:

x=raw_input("row number\n")
y=raw_input("line number\n")
f=open(x+y+".txt","r")
num=[]
for i in range(int(x)):
for j in range(int(y)):
l=f.readline()
l=l.strip('\n').split(" ")
num.append(l)
def maxsum(num,y1,x1):
temp=[0]*x1
s=0
a=-1000000
for i in range(y1):
for j in range(i,y1):
for k in range(x1):
temp[k]+=int(num[j][k])
if(s+temp[k]<temp[k]):
s=0
s+=temp[k]
if(a<s):
a=s
s=0
s=0
temp=[0]*x1
return a
print maxsum(num,int(x),int(y))

生成测试数据如下:

33 -78 158
-41 -31 283
189 -96 -13
-9 -152 277

最后结果为705

作业题目本身并不是很难,但是个人深刻的发现对除了C语言以外的编程语言仅仅是略懂皮毛,写出来的python代码也带有浓厚的C语言风格,并没有充分发挥出python开发效率高的特点,希望自己能够在此方面有所改进。

homework01的更多相关文章

  1. 最大连续子数组问题-homework-01

    1)先写我的 github 的介绍: github 的域名:http://www.github.com/zhuifeng1022 登入 github 大概是下面的视图: 按照助教的方法:我已经建好了代 ...

  2. 现代程序设计——homework-01

    1.我的GitHub用户 首先,接触到现代程序设计这门课之后我才正式开始使用GitHub和它的客户端,以前都是去网站看代码.扒样例.我注册的账户名为:hennande.目前该账户中有我的第一份关于ho ...

  3. 第一次作业(homework-01)成绩公布

    已收到博客名.github名的同学得分列表: 学号后三位 成绩(0-10) 215 8082 0132 5184 5027 7194 9.5157 7074 8195 6222 8158 6128 8 ...

  4. 【现代程序设计】homework-01

    HOMEWORK-01 1) 建立 GitHub 账户, 把课上做的 “最大子数组之和” 程序签入 已完成. 2) 在 cnblogs.com 建立自己的博客. 写博客介绍自己的 GitHub 账户. ...

  5. NS2网络模拟(5)-homework01.tcl

    1: #NS2_有线部分\homework01.tcl 2: 3: #创建两个结点,深圳到北京的TCP连接,图形将数据显示出来,计算吞吐率,画图分析 4: #tcp上层用ftp 5: #udp上层用c ...

  6. homework-01

    我的GitHub账户名是Firedamp. 其实我最一开始看到最大子序列的和这个题目,最先想到的就是最简单的O(n^3)的算法,在课堂上教的也确实是这个程序,但是这种算法的时间复杂度必然是最高的,在数 ...

  7. homework-01 "最大子数组之和"的解决过程

    看到这个题目,我首先想到就是暴力解决 求出所有的子数组的和,取出最大值即可 但其中是可以有优化的 如 子数组[3:6]可以用[3:5]+[6]来计算 即可以将前面的计算结果保留下来,减少后面的重复计算 ...

  8. homework-01 "最大子数组之和"的问题求解过程

    写在前面:我的算法能力很弱,并且也是第一次写博文,总之希望自己能在这次的课程中学到很多贴近实践的东西吧. 1.这次的程序是python写的,这也算是我第一次正正经经地拿python来写东西,结果上来说 ...

  9. My First Blog on cnblogs (现代程序设计 Homework-01)

    Hello CNBLOGS!Hello Everyone! 这是我的第一篇blog,所以这也是一篇试验性的blog. 这个学期我和很多同学一样选修了邹欣老师的现代程序设计这门专业课.第一次看到使用Gi ...

  10. 对"一维最大子数组和"问题的思考(homework-01)

    一维最大子数组和问题,即给定一个数组,在它所有的连续子数组的和中,求最大的那个和.“最大子数组和”是一个很好的IT面试考题,在<编程之美>一书中同时阐述了一维数组和二维数组的讨论.本篇博客 ...

随机推荐

  1. CodeForces 279B Books

    http://codeforces.com/problemset/problem/279/B 题意 :Valera 有很多的空闲时间,所以他决定看书,给出n本书,编号1到n,和看每本书需要的时间,他看 ...

  2. win8.1下使用vmware workstation 来编译ffmpeg

    先吐槽下,T440预装的win8.1 采用 UEFI+GPT分区导致 无法使用传统的EasyBCD来达到win+ubuntu双系统效果, 尝试了2天全部失败,等以后有时间了 买块U盘再干掉win8 现 ...

  3. ZOJ Monthly, November 2014

    做了一次月赛,没想到这么难,加上后来补上的题目也只有3个题.第一名也只有4个题啊啊啊啊~.其中两道还是水题.留坑慢慢补上来. 3832 Tilt Cylinder 给定如图所示有盖圆柱体,R,H,水面 ...

  4. Android Spinner(级联 天气预报)

    activity_spinner.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  5. Microsoft SQL Server 2012 数据库安装图解教程

    本文部分引用以下文章: SQL Server 2012 安装图解教程(附sql2012下载地址)_MsSql_脚本之家 http://www.jb51.net/article/36049.htm SQ ...

  6. java事务管理(二)

    数据库事务和Spring事务是一般面试都会被提到,很多朋友写惯了代码,很少花时间去整理归纳这些东西,结果本来会的东西,居然吞吞吐吐答不上来. 下面是我收集到一些关于Spring事务的问题,希望能帮助大 ...

  7. RabbitMQ消息队列(一): Detailed Introduction 详细介绍(转)

    1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...

  8. hibernate--持久对象的生命周期介绍

    持久化对象的状态 : 1. 瞬时对象(Transient Object):使用new操作符初始化的对象不是立刻就持久的.它们的状态是瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用 ...

  9. Unicode汉字编码表

    U+  0   1  2  3  4   5  6   7   8   9   A  B  C  D  E  F  ------------------------------------------ ...

  10. 开源布局控件 WeifenLuo.WinFormsUI.Docking.dll使用

    WeifenLuo.WinFormsUI.Docking是一个很强大的界面布局控件,可以保存自定义的布局为XML文件,可以加载XML配置文件.! 先看一下效果 使用说明: 1.新建一个WinForm程 ...