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 arcane at 2005-08-03 11:28:50 on Problem 1062
我用深搜+剪枝怎么还limited time exceed?哪位大侠帮忙看看(随手写的,很乱,呵呵)
#include<iostream.h>
#include<math.h>
#include<stack>
using namespace std;
struct subnod{
	int nextnode;
	int cheaperprice;
	subnod *nextsub;
};
struct node{
  int price;
  int level;
  int numofsub;
  subnod *firstsub;
};
node nodearray[101];
inline bool test(stack<subnod*> &a,int m,int d)
{int maxlev=d;
int minlev=d;
subnod *b;
stack<subnod*> c;
while(a.empty()==false)
{b=a.top();
a.pop();
c.push(b);
if(nodearray[b->nextnode].level>maxlev)
maxlev=nodearray[b->nextnode].level;
if(nodearray[b->nextnode].level<minlev)
minlev=nodearray[b->nextnode].level;
}
while(!c.empty())
{b=c.top();
c.pop();
a.push(b);
}
if((maxlev-minlev)>m)
 return false;
 return true;
}

void main()
{int M;
int N;
	cin>>M;
	cin>>N;
	if(N<0||N>100)
		return;
	int i=1;
	int j=1;
	subnod *temp;
	subnod *tempnext;
	for(;i<=N;i++)
	{cin>>nodearray[i].price;
	cin>>nodearray[i].level;
	cin>>nodearray[i].numofsub;
		if(nodearray[i].numofsub!=0)
		nodearray[i].firstsub=new subnod;
	else nodearray[i].firstsub=NULL;
		temp=nodearray[i].firstsub;
	for(j=1;j<=nodearray[i].numofsub;j++)
	{cin>>temp->nextnode;
	cin>>temp->cheaperprice;
	if(j==nodearray[i].numofsub)
		tempnext=NULL;
	else
		tempnext=new subnod;
	temp->nextsub=tempnext;
	temp=tempnext;
	}
	}
	int tempprice=0;
	int tempmin=nodearray[1].price;
	int max=nodearray[1].level;
	stack<subnod*> astack;
	if((temp=nodearray[1].firstsub)!=NULL)
	{astack.push(temp);
	while(temp!=NULL)
	{if(test(astack,M,max))
	{tempprice+=(temp->cheaperprice);
	if(tempprice+nodearray[temp->nextnode].price<tempmin)
	    tempmin=tempprice+nodearray[temp->nextnode].price;
		temp=nodearray[temp->nextnode].firstsub;
	if(temp!=NULL&&tempprice<tempmin)
		astack.push(temp);
	else
		while(temp==NULL)
		{	if(!astack.empty())
	{
		temp=astack.top();
		astack.pop();
		tempprice-=temp->cheaperprice;
		temp=temp->nextsub;
		if(temp!=NULL)
			astack.push(temp);
	}
	else
	{cout<<tempmin;
	return;
	}
		}
	}
		else
		{astack.pop();
		temp=temp->nextsub;
		if(temp!=NULL&&tempprice<tempmin)
		astack.push(temp);
	else
		while(temp==NULL)
		{	if(!astack.empty())
	{
		temp=astack.top();
		astack.pop();
        tempprice-=temp->cheaperprice;
		temp=temp->nextsub;
		if(temp!=NULL)
			astack.push(temp);
		}
		else
	{cout<<tempmin;
	return;
	}
		}
			}
			}
	}
	cout<<tempmin;
}


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