homework01
第一眼看到这个题目的时候就意识到这道题应该使用动态规划来解决,但因代码能力有限,因此从一维的问题开始解决,用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的更多相关文章
- 最大连续子数组问题-homework-01
1)先写我的 github 的介绍: github 的域名:http://www.github.com/zhuifeng1022 登入 github 大概是下面的视图: 按照助教的方法:我已经建好了代 ...
- 现代程序设计——homework-01
1.我的GitHub用户 首先,接触到现代程序设计这门课之后我才正式开始使用GitHub和它的客户端,以前都是去网站看代码.扒样例.我注册的账户名为:hennande.目前该账户中有我的第一份关于ho ...
- 第一次作业(homework-01)成绩公布
已收到博客名.github名的同学得分列表: 学号后三位 成绩(0-10) 215 8082 0132 5184 5027 7194 9.5157 7074 8195 6222 8158 6128 8 ...
- 【现代程序设计】homework-01
HOMEWORK-01 1) 建立 GitHub 账户, 把课上做的 “最大子数组之和” 程序签入 已完成. 2) 在 cnblogs.com 建立自己的博客. 写博客介绍自己的 GitHub 账户. ...
- NS2网络模拟(5)-homework01.tcl
1: #NS2_有线部分\homework01.tcl 2: 3: #创建两个结点,深圳到北京的TCP连接,图形将数据显示出来,计算吞吐率,画图分析 4: #tcp上层用ftp 5: #udp上层用c ...
- homework-01
我的GitHub账户名是Firedamp. 其实我最一开始看到最大子序列的和这个题目,最先想到的就是最简单的O(n^3)的算法,在课堂上教的也确实是这个程序,但是这种算法的时间复杂度必然是最高的,在数 ...
- homework-01 "最大子数组之和"的解决过程
看到这个题目,我首先想到就是暴力解决 求出所有的子数组的和,取出最大值即可 但其中是可以有优化的 如 子数组[3:6]可以用[3:5]+[6]来计算 即可以将前面的计算结果保留下来,减少后面的重复计算 ...
- homework-01 "最大子数组之和"的问题求解过程
写在前面:我的算法能力很弱,并且也是第一次写博文,总之希望自己能在这次的课程中学到很多贴近实践的东西吧. 1.这次的程序是python写的,这也算是我第一次正正经经地拿python来写东西,结果上来说 ...
- My First Blog on cnblogs (现代程序设计 Homework-01)
Hello CNBLOGS!Hello Everyone! 这是我的第一篇blog,所以这也是一篇试验性的blog. 这个学期我和很多同学一样选修了邹欣老师的现代程序设计这门专业课.第一次看到使用Gi ...
- 对"一维最大子数组和"问题的思考(homework-01)
一维最大子数组和问题,即给定一个数组,在它所有的连续子数组的和中,求最大的那个和.“最大子数组和”是一个很好的IT面试考题,在<编程之美>一书中同时阐述了一维数组和二维数组的讨论.本篇博客 ...
随机推荐
- jmeter 一个可能引起性能严重下降的断言设置
在添加断言时一定要注意: 1. 红框部分选择 "响应文本", 2. 要断言的内容越短越好
- PHP开篇之环境的搭建
PHP开篇之环境的搭建 Wamp软件下载:http://www.wampserver.com/ 此时是2.5版本 下载下来一键安装. 安装有个主意 这里先不用管 或者smtp@qq.com 13643 ...
- Git教程之撤销修改(7)
自然,你是不会犯错的.不过现在是凌晨两点,你正在赶一份工作报告,你在readme.txt中添加了一行:
- knowledge about apache
http://wenku.baidu.com/link?url=6O51BQJdtFRFWDGszKfN3aK7IY92QTCpuc7miBhRLazXvxL5gXb18B_TqIdi3EruX1o_ ...
- NFC(6)NFC编程的几个重要类,NFC硬件启动android应用原理
用于NFC编程的几个重要类 Tag NFC 标签 NfcAdapter Nfc 的适配类 NdefMessage 描述NDEF格式的信息 NdefRecord 描述NDEF信息的一个信息段,类似tab ...
- 【HDOJ】4605 Magic Ball Game
思路1:树状数组+离线处理,对所有的w离散化处理,边dfs边使用树状数组更新左右w的情况.思路2:主席树,边bfs边建树.结点信息存储cnt,然后在线查询.树状数组. /* 4605 */ #incl ...
- CentOS5.5上安装git
1.尝试用yum安装git失败 [root@localhost usr]# yum install gitLoaded plugins: fastestmirrorLoading mirror spe ...
- Android开发之一个未解决的bug
使用Activity之间传递数据的时候,出现了一个bug,但是没有找到哪里出错了. 把代码和log都记录下来,以后研究 代码: MainActivity.class package com.examp ...
- MySql命令的基本操作
MySQL的基本命令: 登录:mysql -h -u root -p password:*****; 例如:mysql -h127.0.0.1 -uroot -p 增加一个用户: grant all ...
- windows2003远程桌面退出后系统自动注销的解决方法
最近公司有一个奇怪的需求,意思是有一个网页,要时时的打开着.现在只有把这个网页在服务器上打开. 这样才能满足需求.但我在应用中遇见了个问题.我在服务器上打开网页后,关掉远程,过一会网页的运行效果就没有 ...