homework-02
一、题解
(I)解法1
1、一位数组已经做过了
2、二维数组连续最大子矩阵的和,DP过
3、4、5、实在是不好理解……花了很长时间问了同学知道了大概的算法,但是自己依旧写不出来
(II)解法2
另一种解法,就是暴力,不过时间会溢出
2、二维数组看做一维,从第i行开始,到r行结束,从j列开始,到t列结束,暴力搜索
3、尝试用最小生成树来做,但是代码写到最后也没调试出来;后来换成DP+暴力搜索,还是跪了……
4、暴力的方法,将行搜索的范围扩大,给定限制条件m
5、将列搜索的范围扩大,给定限制条件n
6、4+5,暴力地搜吧- -搜啊搜啊搜啊……最后跪了
二、作业分析
1、感觉DP还是不熟练,做题太虐心,感觉不好。
2、算法复杂度的降低,感觉自己的思考和想法终究局限性太大,对于算法的敏感程度有限。很多东西都处于只能理论,而实践的代码部分则很蛋疼。
3、思路简化和实现,感觉算法对于程序员来说,需要非常熟练地掌握,但是自己不怎么熟悉……感觉很有挫败感啊
4、……真心挫败了,这次作业做得
三、效率分析
| Personal Software Process Stages | 时间百分比(%) | 实际花费的时间 (分钟) | 原来估计的时间 (分钟) | |
| Planning | 计划 | 0.8 | 10 | 10 |
| · Estimate | · 估计这个任务需要多少时间,把工作细化并大致排序 | 0.8 | 10 | 10 |
| Development | 开发 | 92.8 | 1160 | 580 |
| · Analysis | · 需求分析 (包括学习新技术) | 24 | 300 | 240 |
| · Design Spec | · 生成设计文档 | 2.4 | 30 | 20 |
| · Design Review | · 设计复审 (和同事审核设计文档) | 1.6 | 20 | 20 |
| · Coding Standard | 代码规范 (制定合适的规范) | 0.8 | 10 | 10 |
| · Design | · 具体设计 | 16 | 200 | 120 |
| · Coding | · 具体编码 | 38.4 | 480 | 120 |
| · Code Review | · 代码复审 | 4.8 | 60 | 20 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 4.8 | 60 | 30 |
| Reporting | 总结报告 | 6.4 | 80 | 50 |
| · Test Report | · 测试报告 | 4 | 50 | 30 |
| · Size Measurement | · 计算工作量 | 0.8 | 10 | 10 |
| · Postmortem & Improvement Plan | · 事后总结, 并提出改进 | 1.6 | 20 | 10 |
| Total | 总计 | 100% | 1250 | 640 |
四、代码
除了二维写了,其他都没有写出正确的来……也就没有上传了
深深地挫败……
#include<stdio.h>#define M 100#define maxx(a,b) (a)>(b)?(a):(b)
int i, j, k, n, m, sum = 0;int f[M][M][M], g[M][M][M], a[M][M];
int main(){ scanf("%d%d", &m, &n);
for(i = 0; i < m; i++) for(j = 0; j < n; j++) scanf("%d", &a[i][j]);
for(i = 0; i < m; i++) for(j = 0; j < n; j++) for(k = j; k >= 0; k--)g[i][j][k] = g[i][j][k+1] + a[i][k];
for(i = 0; i < n; i++) for(j = 0; j <= i; j++){ f[0][j][i] = g[0][j][i];sum = maxx(sum, f[0][i][j]);}
for(i = 1; i < m; i++) for(j = 0; j < n; j++) for(k = 0; k <= j; k++){f[i][j][k] = maxx(g[i][j][k], f[i-1][j][k] + g[i][j][k]);sum = maxx(sum ,f[i][j][k]);}
printf("%d\n", sum);}

浙公网安备 33010602011771号