• P1028 数的计算


    题目连接

    题面:

    思路:

    拿n = 17举个例子:

    首先 17 肯定是答案之一  , ans = 1;

    第二位可以放 1 ~ 8(构成117 、217 、 317 等等), ans = 1 + 8 = 9:

     

    第三位可以放 1 ~ 4 ,但只能放特定的位置:

      比如我在第三位放 1 ,那么第二位是能是 2 ~ 8 

      比如我在第三位放 3 ,那么第二位是能是 6 ~ 8 

      

    比如我在第四位放 1 ,那么第三位只能是 2 ~ 4 , 满足第三位是 2 ~ 4 的情况有 (8 - 4 + 1) + (8 - 6 + 1) + (8 - 8 + 1) = 9 种 , 所以最后一位为第四位且是1的情况数有 9种 

    所以每次把当前位当成最后一位,算以j结尾的情况数。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn =  1e6 + 10;
    #define ll long long
    #define ios std::ios::sync_with_stdio(false)
    #define int long long
    int num[maxn];
    int nex[maxn];
    signed main()
    {
        ios;
        cin.tie(0);
        int n;
        cin >> n;
        int up = n / 2;
        int ans = 1 + n / 2;
        for(int i = 1 ; i <= n / 2 ; i ++){
            num[i] = 1;
        }
        while(up / 2 >= 1){
            nex[up + 1] = 0;
            for(int i = up ; i >= 1 ; i --){
                nex[i] = nex[i + 1] + num[i];
            }
            for(int i = 1 ; i <= up / 2 ; i ++){
                num[i] = nex[2 * i];
                ans += num[i];
            }
            up /= 2;
        }
        cout << ans << '
    ';
        return 0;
    }
    View Code
  • 相关阅读:
    史上最刁钻的十道英语面试题
    99%的人连Where are you from都不会回答?
    库存管理与订单的控制
    订单处理逻辑
    配送规划
    多商家电子商务解决方案
    电商库存规划
    库存管理从入门到精通
    商家报名系统
    经销商管理
  • 原文地址:https://www.cnblogs.com/GoodVv/p/13594942.html
Copyright © 2020-2023  润新知