• 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
    ", 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;
    }
    


  • 相关阅读:
    T-SQL:Varchar和Nvarchar区别(八)
    UI5-文档-4.1-Hello World!
    UI5-文档-4-Walkthrough
    UI5-文档-3-Hello World!
    UI5-文档-2.5-开发混合Web容器
    UI5-文档-2.4-Node.js-Based开发环境
    UI5-文档-2.3-使用SAPUI5工具为Eclipse开发应用程序
    UI5-文档-2.2-使用SAP Web IDE开发应用程序
    UI5-文档-2.1-使用OpenUI5开发应用
    UI5-文档-2-开发环境
  • 原文地址:https://www.cnblogs.com/pangblog/p/3348030.html
Copyright © 2020-2023  润新知