Chinaunix首页 | 论坛 | 博客
  • 博客访问: 772845
  • 博文数量: 217
  • 博客积分: 2401
  • 博客等级: 大尉
  • 技术积分: 2030
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-16 06:58
个人简介

怎么介绍?

文章分类

全部博文(217)

文章存档

2023年(2)

2022年(3)

2021年(29)

2020年(12)

2019年(5)

2018年(5)

2017年(5)

2016年(3)

2015年(6)

2014年(12)

2013年(16)

2012年(9)

2011年(6)

2010年(15)

2009年(30)

2008年(59)

我的朋友

分类:

2009-01-10 08:57:28

Kadane's 1D algorithm O(N)
Kadane's algorithm /* maximum subarray a[k..l] of a[1..n] */
  (k; l) := (0; 0); s := -inf; t := 0; j := 1;
  for i:=1 to n do begin
  t := t + a[i];
  if t > s then begin (k; l) := (j; i); s := t end;
  if t < 0 then begin t := 0; j := i + 1 end

  end

int Kadane(int* A,int n,int* pk,int* pl)
{
  *pk=0;
  *pl=0;
  int s=1<<31;
  int t=0;
  int i,j=0;
  for(i=0;i  {
  t=t+A[i];
  if(t>s)
  {
  *pk=j;
  *pl=i;
  s=t;
  }
  if(t<0)
  {
  t=0;
  j=i+1;
  }
  }
  return s;
}


Kadane's 2D algorithm O(N3)
#include
#include
 
using namespace std;
 
int main( void )
{
  int N;
  int t = 0;
  int a[100][100];
  int pr[100];
  int S = 1<<31, s = 0, k, l, x1 = 0,x2 = 0,y1 = 0,y2 = 0,j;
 
  cin >> N;
 
  for( int i = 0; i < N; i++)
  for( j = 0; j < N; j++)
  cin >> a[i][j];
 
  for( int z = 0; z < N; z++)
  {
  for(int i = 0; i < N; i++) pr[i] = 0;
 
  for(int x = z; x < N; x++)
  {
  t = 0;
  s = 1<<31;
  j = 0;
  k = 0; l = 0;
  for(int i = 0; i < N; i++)
  {
  pr[i] = pr[i] + a[x][i];
  t = t + pr[i];
  if( t > s)
  {
  s = t;
  k = i;
  l = j;
  }
  if( t < 0 )
  {
  t = 0;
  j = i + 1;
  }
  }
  if( s > S)
  {
  S = s;
  x1 = x;
  y1 = k;
  x2 = z;
  y2 = l;
  }
  }
  }
 
  cout << x1 << " " << y1 << " " << x2 << " " << y2 << endl;
  cout << S;
 
  return 0;
}

阅读(863) | 评论(0) | 转发(0) |
0

上一篇:dye balls

下一篇:e^pi and pi^e

给主人留下些什么吧!~~