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 421162789 at 2009-08-03 20:27:03 on Problem 2184 and last updated at 2009-08-03 20:27:52
In Reply To:终于对了 但是为甚memset(f,0xbf,sizeof(f));就会对呢?? Posted by:421162789 at 2009-08-03 20:18:39
#include<stdio.h>
#include<string.h>
bool flag[210000];
int f[210000];
const int K=100000;
int left,right;
void ZeroOne_Pack1(int cost ,int weight)
{
	int i,ti,tv;
	for(i=left;i<=right;++i)
	{
		if(flag[i]&&f[(ti=i+cost)]<(tv=f[i]+weight))
		{
			flag[ti]=1;
			f[ti]=tv;
		}
	}
	left+=cost;
}
void ZeroOne_Pack2(int cost , int weight)
{
	int i,ti,tv;
	for(i=right;i>=left;--i)
	{
		if(flag[i]&&f[(ti=i+cost)]<(tv=f[i]+weight))
		{
			flag[ti]=1;
			f[ti]=tv;
		}
	}
	right+=cost;
}
int main()
{
	int i,j;
	int S,F,N;
	while(scanf("%d",&N)!=-1)
	{
		//memset(f,0,sizeof(f));
		memset(f,0xbf,sizeof(f));
		memset(flag,0,sizeof(flag));
		f[K]=0;flag[K]=1;
		left=right=K;
		for(i=0;i<N;++i)
		{
			scanf("%d%d",&S,&F);
			if(S<0&&F<0)continue;
			if(S<0)
				ZeroOne_Pack1(S,F);//front to rear
			else
				ZeroOne_Pack2(S,F);//rear to front
		}
		int Max=K;
		for(i=K;i<=right;++i)
		{
			if(!flag[i])continue;
			if(f[i]<0)continue;
			if(f[i]+i>Max)
				Max=f[i]+i;
		}
		printf("%d\n",Max-K);
	} 
	return 0;
}

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