第一眼看到这个题目的时候就意识到这道题应该使用动态规划来解决,但因代码能力有限,因此从一维的问题开始解决,用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. 使用typeid(变量或类型).name()来获取常量或变量的类型---gyy整理

    使用typeid(变量或类型).name()来获取常量或变量的类型 <typeinfo>  该头文件包含运行时类型识别(在执行时确定数据类型)的类 typeid的使用   typeid操作 ...

  2. Android 通过http访问服务器

    目前Android 与服务器交互有两种方式:1.Socket 2. Http : 但由于Http的封装性以及性能比socket要好,所以推荐使用http方式和服务器交互: 通过http访问服务器有三种 ...

  3. QListWidget代码刷新界面

    我有一个特殊效果要求实现(其实很弱智,也变成特殊效果,汗一下自己):两个QRadioButton切换的时候,让旁边的QListWidget自动变化不同的背景色.想了很多办法: 1. 控件自己刷新,不行 ...

  4. Android:为控件绑定监听器

    为控件绑定监听器主要分为以下步骤: 1.获取代表控件的对象2.定义一个类,实现监听器接口3.生成监听器对象4.为控件绑定监听器对象 实例:Button按钮----监听器OnClickListener ...

  5. poj1286Necklace of Beads(ploya定理)

    链接 这个东东是新知识 let's 从头学起吧 这篇文库讲的不错 至少把各种概念学了一遍 然后再看此题 共有两种类型的置换 一种是旋转之后相同算一种 一种是翻转之后相同算一种 对于旋转 共有N次置换 ...

  6. redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)

    一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录 ...

  7. oracle 分组排序

    SELECT * FROM (SELECT A.*, RANK() OVER(PARTITION BY A.DR_ATP_ID, A.AT_CODE ORDER BY A.KEY_CODE) RANK ...

  8. linux tmp75 /dev/i2c-* 获取数据 demo

    /********************************************************************** * linux tmp75 /dev/i2c-* 获取数 ...

  9. OK335xS LAN8710 phy driver hacking

    /******************************************************************** * OK335xS LAN8710 phy driver h ...

  10. Java、JSP获得当前日期的年、月、日

    Java package com.ob; import java.text.ParseException; import java.text.SimpleDateFormat; import java ...