for循环太多,导致运行时间太长,如何优化

minidou2001 2016-06-28 05:12:31
代码比较low,for循环太多,导致运行时间太长,各路大神能不能帮忙看看怎么优化?
// 求最大子矩阵
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int n,nn,i,j,t;
while (cin>>nn)
{
if(nn>0&&nn<=100)
n=nn;
int ** a;
int count=0,m=0,i1,j1,i2,j2,temp,p,sum;
a=(int **)new int * [n];
for(i=0;i<n;i++)
a[i]=new int[n];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cin>>t;
if(t>=-127&&t<=127)
a[i][j]=t;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(i1=i;i1<n;i1++)
for(j1=j;j1<n;j1++)
{
sum=0;
for(i2=i;i2<=i1;i2++)
for(j2=j;j2<=j1;j2++)
sum+=a[i2][j2];
if(sum>count)
count=sum;
}
}
}
cout<<count<<endl;
}
return 0;
}

...全文
3713 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zw9882 2016-07-07
  • 打赏
  • 举报
回复
用memcpy. 不知道想干嘛,搞那么多无意义的循环,而且代码书写习惯很不好。
wanren13 2016-06-30
  • 打赏
  • 举报
回复
不喜欢用new,用vector写了一个。复杂度为O(row * row * col)。 还可以进一步优化为O(n * n * m), n = min(row, column), m = max(row, colum); 代码如下,欢迎提意见。

	class Solution {
	public:
		int maxSum(vector<vector<int>> matrix) {
			if (matrix.empty()) return INT_MIN;
			int height = matrix.size();
			int width = matrix[0].size();

			// calculate accumulative sum for each column
			for (int r = 1; r < height; r++) {
				for (int c = 0; c < width; c++) {
					matrix[r][c] = matrix[r][c] + matrix[r - 1][c];
				}
			}

			int max_val = matrix[0][0];

			for (int begin = 0; begin < height; begin++) {
				for (int r = begin; r < height; r++) {
					// sum of each colomn from row_begin to row_r
					vector<int> sums = matrix[r];
					for (int c = 0; c < width; c++) {
						sums[c] = begin == 0 ? sums[c] : sums[c] - matrix[begin - 1][c];
					}

					// find consecutive max from column 0 to column width - 1
					for (int c = 1; c < width; c++) {
						int s = sums[c] + sums[c - 1];
						if (sums[c] < s) {
							sums[c] = s;
							max_val = max(max_val, s);
						}
					}
				}
			}
			return max_val;
		}
	};
wanren13 2016-06-30
  • 打赏
  • 举报
回复
你这是暴力解法,复杂度太高。 用动态规划,复杂度可以降到O(n * n * m)。m是行,n是列。
super_admi 2016-06-28
  • 打赏
  • 举报
回复
这是想干嘛?设计思路有问题啊。
jiqiang01234 2016-06-28
  • 打赏
  • 举报
回复
memcpy(),不使用循环
赵4老师 2016-06-28
  • 打赏
  • 举报
回复
先设置生成Release版。 再泡一杯咖啡。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧