zoukankan      html  css  js  c++  java
  • 素数个数(素数➕dfs)

    用 0,1,2,3 cdots 70,1,2,37 这 88 个数组成的所有整数中,质数有多少个(每个数字必须用到且只能用一次)。

    提示:以 00 开始的数字是非法数字。

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <stdlib.h>
     4 #include <string>
     5 #include <string.h>
     6 #include <set>
     7 #include <queue>
     8 #include <stdbool.h>
     9 
    10 #define LL long long
    11 #define inf 0x3f3f3f3f
    12 using namespace std;
    13 const int MAXN=77777777;
    14 
    15 int vis[8];
    16 int prime[MAXN];
    17 int sum;
    18 
    19 void is_prime()
    20 {
    21     memset(prime,true, sizeof(prime));
    22     for (int i=2;i<MAXN;i++)
    23     {
    24         if (prime[i])
    25         {
    26             for (int j=2*i;j<MAXN;j+=i)
    27                 prime[j]=false;
    28         }
    29     }
    30 }
    31 
    32 void dfs(int x,int y)
    33 {
    34     if (y == 0)
    35     {
    36         if (prime[x])
    37             sum+=1;
    38         return ;
    39     }
    40     for (int i=0;i<=7;i++)
    41     {
    42         if (!vis[i])
    43         {
    44             vis[i]=1;
    45             dfs(x*10+i,y-1);
    46             vis[i]=0;
    47         }
    48     }
    49 }
    50 
    51 
    52 
    53 int main()
    54 {
    55 #ifndef ONLINE_JUDGE
    56     freopen("../in.txt","r",stdin);
    57 #endif
    58     memset(vis,0, sizeof(vis));
    59     sum = 0;
    60     is_prime();
    61     for (int i=1;i<=7;i++)
    62     {
    63         vis[i]=1;
    64         dfs(i,7);
    65         vis[i]=0;
    66     }
    67     cout << sum << endl;
    68     return 0;
    69 }
  • 相关阅读:
    CF 436D 最小生成树
    HDU 1847 博弈
    ZOJ 3666 博弈 SG函数
    zoj3675 BFS+状态压缩
    HDU 4734 F(x) 数位DP
    HDU 3709 Balanced Number 数位DP
    HDU 3555 数位DP
    HDU 4336 Card Collector
    HDU4340 Capturing a country DP
    CF 351A
  • 原文地址:https://www.cnblogs.com/-Ackerman/p/11218423.html
Copyright © 2011-2022 走看看