• POJ


    题意:给你一串数字,最少一个,最多七个,问用这里面的数字能组成多少素数,不重复。

    思路:之前还遍历10000000的每一个素数,结果超时,后来发现直接dfs就可以了,只是标记一下做过的数。

     1 #pragma comment(linker, "/STACK:1000000000")
     2 #include <bits/stdc++.h>
     3 #define LL long long
     4 #define INF 0x3f3f3f3f
     5 #define IN freopen("in.txt","r",stdin)
     6 #define OUT freopen("out.txt", "w", stdout)
     7 #define MAXN 10000005
     8 using namespace std;
     9 bool vis[MAXN], done[MAXN], has[10];
    10 int p[1000005];
    11 char s[10];
    12 int cnt[15], a[15];
    13 int n, ans;
    14 void dfs(int m, int res){
    15     if(done[res]) return;
    16     if(!vis[res]){
    17         ans++;
    18     }
    19     done[res] = true;
    20     if(m > n) return;
    21     for(int i = 1; i <= n; i++){
    22         if(has[i]) continue;
    23         has[i] = true;
    24         dfs(m + 1, res * 10 + (s[i] - '0'));
    25         dfs(m + 1, res);
    26         has[i] = false;
    27     }
    28 }
    29 int main()
    30 {
    31     //IN;
    32     //OUT;
    33     int T;
    34     memset(vis, 0, sizeof(vis));
    35     int o = 0;
    36     vis[0] = vis[1] = true;
    37     for(int i = 2; i <= 3200; i++){
    38         if(!vis[i]){
    39             p[o++] = i;
    40         }
    41         for(int j = 2 * i; j <= 10000000; j += i){
    42             vis[j] = true;
    43         }
    44     }
    45     scanf("%d", &T);
    46     while(T--){
    47         //memset(cnt, 0, sizeof(cnt));
    48         ans = 0;
    49         memset(has, 0, sizeof(has));
    50         memset(done, 0, sizeof(done));
    51         scanf("%s", s + 1);
    52         n = strlen(s + 1);
    53         dfs(1, 0);
    54         printf("%d
    ", ans);
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    Python-Image 基本的图像处理操作
    剪枝
    poj1182(食物链)续
    HLG2035广搜
    HLG2040二叉树遍历已知前中,求后
    先序,中序,后序,已知两者求第三者
    C++中new的解说
    僵尸进程
    HLG2062(make,heap问题)
    make_head,,,pop_head,,,push_head,,,sort_head..
  • 原文地址:https://www.cnblogs.com/macinchang/p/4747861.html
Copyright © 2020-2023  润新知