模擬了半天,沒模擬出來...撐不住了看題解
汗了,看來確實要克服把每道題當模擬題做的缺點,多想想...
//edited by Eddy
//from BUAA SoftWare College
//any question:oeddyo@gmail.com

#include <iostream>
#include <cmath>
using namespace std;


int main()


{
int N,K;
cin>>N>>K;
int f[30];
f[0]=K-1;
f[1]=K*(K-1);
int i;
for(i=2;i<N;i++)

{
f[i]=(K-1)*(f[i-1]+f[i-2]);
}
cout<<f[N-1];

return 0;
}
精華就在f[i]=(K-1)*(f[i-1]+f[i-2])這行
f[0]=K-1是自然,因為一位的時候0是不算的。
f[1]=K*(K-1),可以這樣想,當f[1]取K進制中某個除0以外的值的時候,后面的那位數字自己不斷變化,這個時候后面的那位數是可以取0的
從第3位開始,第N位的時候就相當于第N位隨便變(除0以外),先考慮后N-1位(第N-1位不能為0)。然后還有N-1位為0,后N-2位隨便變。加起來乘以K-1,即第N位隨便變的即可
汗了,看來確實要克服把每道題當模擬題做的缺點,多想想...
//edited by Eddy
//from BUAA SoftWare College
//any question:oeddyo@gmail.com
#include <iostream>
#include <cmath>
using namespace std;

int main()

{
int N,K;
cin>>N>>K;
int f[30];
f[0]=K-1;
f[1]=K*(K-1);
int i;
for(i=2;i<N;i++)
{
f[i]=(K-1)*(f[i-1]+f[i-2]);
}
cout<<f[N-1];
return 0;
}
精華就在f[i]=(K-1)*(f[i-1]+f[i-2])這行
f[0]=K-1是自然,因為一位的時候0是不算的。
f[1]=K*(K-1),可以這樣想,當f[1]取K進制中某個除0以外的值的時候,后面的那位數字自己不斷變化,這個時候后面的那位數是可以取0的
從第3位開始,第N位的時候就相當于第N位隨便變(除0以外),先考慮后N-1位(第N-1位不能為0)。然后還有N-1位為0,后N-2位隨便變。加起來乘以K-1,即第N位隨便變的即可

