阔别一年回来重新做题,感觉生疏了很多……
简单来说是一个等比数列之间,不同项之和的关系。明显我们最关心的是,这个等比数列前n-1项之和和第n项的大小关系,假设:
(1-q^n)/(1-q)< q^n -> 1/q^n+ q > 2
可知,当3<q<15时,上式恒成立(注意这里的q就是题中的k)。
所以,假设k的某次幂在data[n],那么data[ n + i + 1 ] = data[ n ] + data[ i ],其中i<n。
Run Time: 0sec
Run Memory: 312KB
Code Length: 609Bytes
Submit Time: 2013-02-2813:13:39
// Problem#: 1344
// Submission#: 1927939
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int k, N;
int data[ 1000 ];
int i, n, p;
data[ 0 ] = 1;
while ( cin >> k >> N ) {
data[ 1 ] = k;
n = 1;
p = 2;
while ( n + 1 < N ) {
for ( i = 0; i < n && n + i + 1 < N; i++ )
data[ n + i + 1 ] = data[ i ] + data[ n ];
if ( n + i + 1 < N ) {
n = n + i + 1;
data[ n ] = powl( k, p++ );
}
else
break;
}
cout << data[ N - 1 ] << endl;
}
return 0;
}