POJ 2244 Eeny Meeny Moo

这个题很无语,死磕就能过,开始像找到dp的方法或数论的方法,都失败。后来尝试暴力,果然过了……分析一下感觉过了也正常,数据最大只有100多,由于要找最小的想必每个数的答案也不会太大,从2开始试,到找到结果为止,运算量在万的数量级上,可以接受,所以暴力可过。当然,这种题本地打表自然可以过。以下是代码:

#include <iostream>

using namespace std;

 

long r[200];

bool away[200];

 

int main()

{

         long n,i,j,awayC,next,now,k,l;

         for(i=3;i<=150;i++)

         {

                   for(j=2;;j++)

                   {

                            memset(away,0,sizeof(away));

                            now=1; awayC=0;

                            while(now!=2)

                            {

                                     away[now]=1; awayC++;

                                     long c=0;

                                     for(k=now+1;;k++)

                                     {

                                               if(k>i)

                                               {

                                                        for(l=1;away[l];l++);

                                                        k=l-1;

                                               }

                                               else if(!away[k])

                                               {

                                                        c++;

                                                        if(c==j) break;

                                               }

                                     }

                                     now=k;

                            }

                            if(awayC==i-1) break;

                   }

                   r[i]=j;

         }

         while(cin>>n,n) cout<<r[n]<<endl;

}

posted on 2010-03-05 10:21  liugoodness  阅读(435)  评论(0编辑  收藏  举报

导航