ACM--Genetic Code(POJ 2558)

4 篇文章 0 订阅
<span style="font-family:Arial, Helvetica, sans-serif;">由于题目只要求一组解,所以在使用DSF算法时,递归的时候要有返回值,这样可以马上退出,求的一组解。</span>
<span style="font-family:Arial, Helvetica, sans-serif;">但如果是求出所有解,则无需返回值。</span>
<span style="font-family:Arial, Helvetica, sans-serif;">
</span>
<span style="font-family:Arial, Helvetica, sans-serif;"></span><pre name="code" class="cpp">#include<stdio.h>
char a[5002];
char b[4]="NOP";

int Ok(int l)
{
	int i,j;
	for(i=0;i<(l+1)/2;i++)
	{
		for(j=0;j<=i;j++)
		{
			if(a[l-i+j]!=a[l-2*i+j-1])break;
		}
		if(j>i)return 0;
	}
	return 1;
}
int fun(int i)
{
	if(i>=5000)
	  return 1;
	for(int j=0;j<3;j++)
	{
		a[i]=b[j];
		if(!Ok(i)) 
		  continue;
		//fun(i+1); 
		if(fun(i+1)) 
		  return 1;
	}
	return 0;
}


int main()
{
	
	int n;
	fun(0);	
	while(scanf("%d",&n)!=EOF,n)
	{
		for(int i=0;i<n;i++)
		   printf("%c",a[i]);
		printf("\n");
	}
	return 0;
}



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值