效云 李
unread,Apr 20, 2009, 3:34:34 AM4/20/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to 编程爱好者天地
具体题目没找到,是书上的算法实现3-13
代码:
// 动态规划-最大长方体问题.cpp : Defines the entry point for the console
application.
//
#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int m=0,n=0,p=0;
int i=0,j=0,k=0;
ifstream finput;
finput.open("input.txt");
finput>>m>>n>>p;
vector<vector<vector<int> > > v(m+1,vector<vector<int> >(n
+1,vector<int>(p+1)));
int temp=0;
for(i=1;i<=m;++i)
{
for(j=1;j<=n;++j)
{
for(k=1;k<=p;++k)
{
finput>>temp;
v[i][j][k]=temp;
}
}
}
finput.close();
int max=0;
void calculate(vector<vector<vector<int> > >&,int,int,int,int&);
void (*p_calculate)(vector<vector<vector<int> >
>&,int,int,int,int&);
p_calculate=calculate;
(*p_calculate)(v,m,n,p,max);
cout<<max<<endl;
system("pause");
return 0;
}
void calculate(vector<vector<vector<int> > >& v,int m,int n,int p,int&
max)
{
void calculate2(vector<vector<int> >,int,int,int,int&);
void (*p_calculate2)(vector<vector<int> >,int,int,int,int&);
p_calculate2=calculate2;
vector<vector<int> > v2(n+1,vector<int>(p+1));
for(int dimension_three_begin=1;dimension_three_begin<=m;+
+dimension_three_begin)
{
//清零V2数组
for(int i=1;i<=n;++i)
{
for(int j=1;j<=p;++j)
{
v2[i][j]=0;
}
}
for(int
dimension_three_end=dimension_three_begin;dimension_three_end<=m;+
+dimension_three_end)
{
//对V2数组经行赋值
for(int i=1;i<=n;++i)
{
for(int j=1;j<=p;++j)
{
v2[i][j]+=v[dimension_three_end][i][j];
}
}
(*p_calculate2)(v2,m,n,p,max);
}
}
}
void calculate2(vector<vector<int> >v2,int m,int n,int p,int& max)
{
vector<int> v1(p+1);
int calculate1(vector<int>,int);
int (*p_calculate1)(vector<int>,int);
p_calculate1=calculate1;
for(int dimension_two_begin=1;dimension_two_begin<=n;+
+dimension_two_begin)
{
//清零V1数组
for(int k=1;k<=p;++k) v1[k]=0;
for(int dimension_two_end=dimension_two_begin;dimension_two_end<=n;
++dimension_two_end)
{
for(int k=1;k<=p;++k) v1[k]+=v2[dimension_two_begin][k];
int temp=(*p_calculate1)(v1,p);
if(max<temp) max=temp;
}
}
}
int calculate1(vector<int> a,int n)
{
int sum=0,b=0;
for(int i=1;i<=n;++i)
{
if(b>0) b+=a[i];
else b=a[i];
if(b>sum)sum=b;
}
return sum;
}