1 条题解

  • 1
    仔细观察题目 相加幂数0,1,0+1,2,0+2,1+2,0+1+2,3,0+3,1+3,0+1+3,2+3,0+2+3,1+2+3,0+1+2+3……
    第一部分有1项,第二部分有2项。第n部分就有2^n项。
    第n部分的第一项就是k^n,第n部分的第二项就是k^n+f[1],第n部分的第i项就是k^n+f[i-1]
    故能“轻易”写出
    #include<bits/stdc++.h>
    using namespace std;  
    long long  a[10];
    long long  f[1010];
    int main()
    {
        long long k,n;
        cin >> k >> n;
        int i,j;
        a[0] = 1;
        int s = 1;  
        for (i = 1; i <= 9; i++) 
             a[i] = a[i-1] * k;  
        for (i=0 ; i <= 9 ;  i++)
        {
            f[s] = a[i]; 
            for (j = 1 ; j <= s ; j++)
                f[s+j]  = f[s] + f[j];
            s *= 2;
            if (f[n]!=0) 
            {
                printf("%d",f[n]);  
                return 0;
            }
        } return 0; 
    }//网上好像有将其幂数转换成二进制的做法好像更简单
    
    • 1

    信息

    ID
    398
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者