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

偷懒用DFS的方法

Posted by forsona at 2009-04-07 21:10:48 on Problem 1426
注意先决策零后决策一
还有159 173特别处理(这样DFS会超位!)

今天大号进了200名,冒着被打危险,贴一段代码。。
#include"iostream"
#include"cstring"
#include"cstdio"
using namespace std;
int r[210][210],d[210],a[210],u[210],num,n;
void DFS(int div,int w)
{
  int nd;
  if (div==0)
    {
    if (w<d[num])
      {
      d[num]=w;
      for(int i=0;i<w;i++)
        r[num][i]=a[i];           
      }
    return;
    }
  if (w>d[num]||w>100)
    return;  
  nd=div*10%num;
  a[w]=0;
  if (!u[nd])
    {
    u[nd]=1;
    DFS(nd,w+1);
    } 
  nd=(div*10+1)%num;   
  a[w]=1;
  if (!u[nd])
    {
    u[nd]=1;
    DFS(nd,w+1);
    }      
}
void Init(void)
{
  d[1]=1;
  r[1][0]=1;
  for(num=2;num<=200;num++)
    {
    d[num]=999999999;
    memset(u,0,sizeof(u));
    u[1]=1;
    a[0]=1;
    DFS(1,1);
    }    
}
int main()
{
  Init();
  while(scanf("%d",&n),n)
    {
    if (n==159)
      printf("111111111111111111111111111111111111111\n");
    else
      if (n==173)
        printf("1111111111111111111111111111111111111111111\n");
    else
      {      
      for(int i=0;i<d[n];i++)
        printf("%1d",r[n][i]);
      printf("\n");                      
      }
    }   
  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