XTU-128

1270 Unique Digit Number

这道题是数位dp。

#include
__int64 a[9000000];
int t[9000000];  //不看t的值,t用来标记,记录独特数占了哪些位 也就是用了哪个数
int main()
{
     
    int i,j;
    int num=1;
    for(i= 1;i<10;i++)
    {
     
        a[num] = i;
        t[num] =t[num]|(1<<i);
        num++;
    }
    for(i=1;i<num;i++)//num==10 
    {
     
        for(j=0;j<10;j++)
        {
      
            if((1<<j) & ~t[i])//~是按位取反.  
            {
     
                a[num]=a[i]*10+j;
                t[num]=t[i]|(1<<j);
                num++;
            }
        }
    }
    while(scanf("%d",&i)!=EOF)
        printf("%I64d\n",a[i-1]);
}

你可能感兴趣的:(#,128,模拟考试)