现在的位置: 首页 > 综合 > 正文

枚举 poj1012

2013年12月04日 ⁄ 综合 ⁄ 共 820字 ⁄ 字号 评论关闭

自己首先写了程序,想了好长时间的节省时间到最后还是超市,后来后来只好暴力啦!因为k是小于14的,所以就开了一个数组将前14个的值记下来然后提交上去0MS过了,不过也没有一点自豪感啊!

超时的代码:

#include<iostream>
using namespace std;
int main()
{
	int k,i,m,j,l,r;
	bool vis[30];
	while(1)
	{
		scanf("%d",&k);
		if(k==0)
			break;
		int sign=0;
		for(r=k+1; ; r+=k+1)
		{
			for(i=r; i<=r+1; i++)
			{
		    	int t=i;
			    for(j=k+1; j<=2*k; j++)
			        vis[j]=false;
			    m=2*k;
			    while(1)
				{ 
					t=t%m;
					if(t==0)
						t=m;
			        if(t<=k)//此时就是取得前面的数的
				        break;
			        t=t-k;
			        for(j=k+1; j<=2*k; j++)
				         if(vis[j]==false)
						 {
					         t--;
					         if(t==0)
							 {
						        vis[j]=true;
							    m--;
							     t=i;
		//				     t=i-(m-k);
						         for(l=j+1; l<=2*k; l++)
								 {
								     if(vis[l]==false)
									     t--;
								 }
							     if(m==k)
								     goto xy;
							     break;
							 }
						 } 
				}
			}
		}
xy:		printf("%d\n",i);
	}
	return 0;
}

超级超级暴力的代码啊!:

#include<iostream>
using namespace std;
int main()
{
	int a[15],k;
    a[1]=2;
	a[2]=7;
	a[3]=5;
	a[4]=30;
	a[5]=169;
	a[6]=441;
	a[7]=1872;
	a[8]=7632;
	a[9]=1740;
	a[10]=93313;
	a[11]=459901;
	a[12]=1358657;
	a[13]=2504881;
	a[14]=13482720;
	while(1)
	{
		cin>>k;
		if(k==0)
			break;
		cout<<a[k]<<endl;
	}
	return 0;
}

 

抱歉!评论已关闭.