Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

大家能不能帮我看看的这个程序为什么会超内存

Posted by zhujie at 2005-12-31 14:17:48
这是1036的程序,原来我以为是数组分配太大了,可是后来我用了别人的程序(也是分配了101*30001个元素的整型数组)提交,结果accepted,只用了内存450K,而我这个为什么会超这么多呢?
#include <iostream>
#define MAXN 100
#define MAXK 100
#define MAXT 30000
#define MAXX 1000
using namespace std;

struct Gangster {
	int t,p,s;
};
int n,k,t;
Gangster g[100];
int dp[MAXK+1][MAXT+1];

void input();
void DP();
int max(int a,int b,int c=-MAXX);
int compare(const void* a,const void *b);
int price(int s,int t);
int main()
{
	int i,best;
	input();
	qsort(g, n, sizeof(Gangster), compare);
	DP();
	best=0;
	for (i=0;i<=k;i++)
		if (dp[i][t]>best)  best=dp[i][t];
	cout<<best<<endl;
	return 0;
}

void input()
{
	
	int i;
	cin>>n>>k>>t;
	for (i=0;i<n;i++)  cin>>g[i].t;
	for (i=0;i<n;i++)  cin>>g[i].p;
    for (i=0;i<n;i++)  cin>>g[i].s;
}
void DP()
{
	int i,j;
	dp[0][0]=0;
	for (i=1;i<=k;i++)  dp[i][0]=-MAXX;	
	for (j=1;j<=t;j++)
	{
		for (i=0;i<=k;i++)
		{
			if (i==0)  dp[i][j]=max(dp[i][j-1],dp[i+1][j-1])+price(i,j);
			else if (i==k) dp[i][j]=max(dp[i][j-1],dp[i-1][j-1])+price(i,j);
			else dp[i][j]=max(dp[i-1][j-1],dp[i][j-1],dp[i+1][j-1])+price(i,j);
		}
	}
}
int max(int a,int b,int c)
{
	int temp=(a>b?a:b);
	return (temp>c?temp:c);
}
int price(int s,int t)
{
	int i;
	for (i=0;i<n;i++)
	{
		if (g[i].t>t) return 0;
		if (g[i].t==t&&g[i].s==s) return g[i].p;
	}
	return 0;
}
int compare(const void* a,const void *b)
{ 
    return (*(Gangster*)a).t-(*(Gangster*)b).t; 
} 

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator