Project Euler problem 61

题意很明了。


然后我大概的做法就是暴搜了

先把每个几边形数中四位数的处理出来。

然后我就DFS回溯着找就行了。

比较简单吧。


 

#include <cstdio>

#include <iostream>

#include <algorithm>

#include <cstring>

#include <cmath>

#include <vector>

using namespace std;

vector<int>g[7], v[7][10000];

int vis[7];

void get_three()

{

    for(int i = 1; ; i++)

    {

        int x = i * (i + 1) / 2;

        if(x >= 10000) break;

        if(x >= 1000) g[0].push_back(x);

    }

}

void get_four()

{

    for(int i = 1; ; i++)

    {

        int x = i * i;

        if(x >= 10000) break;

        if(x >= 1000) g[1].push_back(x);

    }

}

void get_five()

{

    for(int i = 1; ; i++)

    {

        int x = i * (3 * i - 1) / 2;

        if(x >= 10000) break;

        if(x >= 1000) g[2].push_back(x);

    }

}

void get_six()

{

    for(int i = 1; ; i++)

    {

        int x = i * (2 * i - 1);

        if(x >= 10000) break;

        if(x >= 1000) g[3].push_back(x);

    }

}

void get_seven()

{

    for(int i = 1; ; i++)

    {

        int x = i * (i * 5 - 3) / 2;

        if(x >= 10000) break;

        if(x >= 1000) g[4].push_back(x);

    }

}

void get_eight()

{

    for(int i = 1; ; i++)

    {

        int x = i * (3 * i - 2);

        if(x >= 10000) break;

        if(x >= 1000) g[5].push_back(x);

    }

}

int a[7];

int ans;

int flag;

void dfs(int deep)

{

    if(flag) return;

    if(deep == 6)

    {

        if(a[5] % 100 == a[0] / 100)

        {

            flag = 1;

            printf("%d\n", a[0] + a[1] + a[2] + a[3] + a[4] + a[5]);

            return;

        }

    }

    for(int i = 0; i < 6; i++)

    {

        if(!vis[i])

        {

            for(int j = 0; j < g[i].size(); j++)

            {

                int y = g[i][j];

                if(!deep || y / 100 == a[deep - 1] % 100)

                {

                    vis[i] = 1;

                    a[deep] = y;

                    dfs(deep + 1);

                    vis[i] = 0;

                }

            }

        }

    }

}

int main()

{

    get_three();

    get_four();

    get_five();

    get_six();

    get_seven();

    get_eight();

    dfs(0);

    return 0;

}


 

 

你可能感兴趣的:(project)