Project Euler problem 43

来源:互联网 发布:wap淘宝流量和手淘流量 编辑:程序博客网 时间:2024/05/21 10:53

这题的话

直接next_permutation搞也行

10!也就300多W


或者像这样,DFS着来搞  效率会快很多


#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>#include <set>#include <stack>#include <cmath>#include <map>#include <ctime>#define MAXN 1111111#define MAXM 400005#define INF 2000000007#define PI acos(-1.0)using namespace std;int b[7] = {2, 3, 5, 7, 11, 13, 17};long long sum = 0;void dfs(long long num, int bitmask, int deep){    if(bitmask == 1023)    {        sum += num;        return;    }    for(int i = 0; i < 10; i++)        if((bitmask & (1 << i)) == 0)        {            int f = (num % 100) * 10 + i;            if(f % b[deep + 1] == 0)                dfs(num * 10 + i, bitmask | (1 << i), deep + 1);        }}int main(){    for(int i = 0; i < 10; i++)        for(int j = 0; j < 10; j++)            for(int k = 0; k < 10; k++)                if(i != j && i != k && j != k)                {                    int f = i * 100 + j * 10 + k;                    dfs(f, (1 << i) + (1 << j) + (1 << k), -1);                }        return 0;}


原创粉丝点击