1,3,4,9,10,12,13,…
(该序列实际上就是:3 0,3 1,3 0+3 1,3 2,3 0+3 2,3 1+3 2,3 0+3 1+3 2,…)
请你求出这个序列的第N项的值(用10进制数表示)。
例如,对于k=3,N=100,正确答案应该是981。
k N
(k、N的含义与上述的问题描述一致,且3≤k≤15,10≤N≤1000)。
第一眼看上去感觉挺难处理的,仔细想想就找到了规律。我们以k=3为例,只需要找出每一个3的方幂,然后用当前找出的3的方幂和前面所有数分别相加即可得到当前3的方幂后面的数,前面的数全部用完后下一个数就是3的下一个方幂。用题目给的例子来说明就是
10=9+1
12=9+3
13=9+4
此时3的方幂9之前的数全部用完,于是再下一个数就是3的3方幂27,这样的话就变成一道简单的模拟题啦,代码如下:
#include<cstdio>
#include<algorithm>
#include<queue>
#include<iostream>
#include<cstring>
#include<cmath>
#define Inf 99999999
using namespace std;
int main()
{
int k,n;
scanf("%d%d",&k,&n);
int num[1010];
num[1]=1;
num[2]=k;
int sum=k;
int index=2;
while(1)
{
for(int i=1;i<index;i++)
{
num[index+i]=num[index]+num[i];
if(index+i>=n)
break;
}
index*=2;
if(index>n)
break;
sum*=k;
num[index]=sum;
}
printf("%d",num[n]);
return 0;
}