• P1028数的计算(骗分篇)


    很明显

    这是一道递归题目

    我一开始也天真的使用未优化的递归计算

    但都被TLE

    分析一下代码

    #include<iostream>
    using namespace std;
    void flag(int);
    int w=1;
    int main()
    {
        int k,n;
        cin>>n;
        flag(n);
        cout<<w;
     } 
    void flag(int v)
     {
         if(v==1) return;
         for(int i=v/2;i>0;i--)
         {w++;flag(i);}
        
     }

    简单一分析——O(n)=n^n

    。。。。。这个复杂度

    但我又不会优化

    我参考了一下题解

    诶……

    我发现了宝藏

    搜索打表

    我试了试5分钟内没搜完

    然后我等不下去了用了优化递归

    我草率的发一下搜索范围不完全的一个程序吧

    简单改一改上面的

    搜索程序

    #include <cstdio>
    #include <iostream>
    using namespace std;
    long long flag(int)
    int main()
    {
    cout<<"a[100]={";
    for(int i=1;i<=100;i++)
    {
    cout<<flag(i)<<",";
    }
    cout<<"}";
    }

    long long flag(int v)
    {
    if(v==1) return 1;
    long long w=1; 
    for(int i=1;i<=v/2;i++) 
    w+=flag(i);
    return w;
    }

    打表程序

    #include<iostream>
    using namespace std;
    int main(){
        int n;
        cin>>n;
        int a[100]={1,2,2,4,4,6,6,10,10,14,14,20,20,26,26,36,36,46,46,60,60,74,74,94,94,114,
    114,140,140,166,166,202,202,238,238,284,284,330,330,390,390,450,450,524,524,598,
    598,692,692,786,786,900,900,1014,1014,1154,1154,1294,1294,1460,1460,1626,1626,
    1828,1828,2030,2030,2268,2268,2506,2506,2790,2790,3074,3074,3404,3404,3734,3734,4124,4124,4514,4514,4964,4964,5414,5414,5938,5938,6462,6462,7060,7060,7658,7658,8350,8350,9042,9042,9828,};
    cout<<a[n];    
        return 0;
    }

    (我凭本事打表,凭什么说我骗分)

  • 相关阅读:
    Tire树的理解和应用
    C语言:socket简单模拟http请求
    C语言:关于socket的基础知识点
    php中的ip2long和long2ip的理解
    理解php中的pack/unpack/ord/chr
    zlog学习笔记(mdc)
    计算机工作的进行
    期末总结
    第十四周学习报告
    第十三周学习报告
  • 原文地址:https://www.cnblogs.com/-Iris-/p/12257789.html
Copyright © 2020-2023  润新知