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

Re:标准算法是用搜索吗?我用搜索,很快.....希望有确定的算法

Posted by zcgzcgzcg at 2006-12-28 20:57:56 on Problem 3092
In Reply To:标准算法是用搜索吗?我用搜索,很快.....希望有确定的算法 Posted by:zcgzcgzcg at 2006-12-28 20:55:37
改为无法证明的确定算法,AC!
麻烦大家帮助证明:)
#include <stdio.h>

long a[31][2],yh[19+1],
	success,n;

void print(long level)
{
	long i,num=0;
	printf("%ld",level);
	for (i=1; i<=level; i++)
	{
		printf(" [%ld,%ld]",a[i][0],a[i][1]);
		//num+=(1<<a[i][0])*(yh[a[i][1]]);
	}
	printf("\n");
}

void work(long level,long n,long mi2,long top3)
{
	long i;
	if (success)
		return;
	if (n==0)
	{
		print(level-1);
		success=1;
		return;
	}
	if (top3<0)
		return;
	while (!(n&1))
	{
		n/=2;
		mi2++;
	}
	for (i=top3; i>=0; i--)
	{
		if (yh[i]>n)
			continue;
		if (!((n-yh[i])&1))
		{
			a[level][0]=mi2;
			a[level][1]=i;
			work(level+1,n-yh[i],mi2,i-1);
                           break; //important!!!
		}
	}
}	

int main()
{
	long i,t;
	yh[0]=1;
	for (i=1; i<=19; i++)
		yh[i]=yh[i-1]*3;
	scanf("%ld",&t);
	for (i=1; i<=t; i++)
	{
		scanf("%ld",&n);
		printf("%ld ",i);
		success=0;
		work(1,n,0,19);
	}
	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