有条件的不重复排列问题
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 4;
ll f[N][2], n, k;
const ll mod = 1e9 + 7;
int main(){
cin >> n >> k;
f[1][0] = k;
for(int i = 2; i <= n; i++){
f[i][0] = (f[i - 1][0] + f[i - 1][1]) % mod * (k - 1) % mod;
f[i][1] = (f[i - 1][0]) % mod;
}
cout<<(f[n][0] + f[n][1])%mod;
}

浙公网安备 33010602011771号