题目链接:https://www.nowcoder.com/acm/contest/157/A
题目描述
xb有m种石子,每种无限个,Ta想从这些石子中取出n个,并按顺序排列起来,为了好看,相邻的石子不能相同。xb想知道有多少种排列的方法。
输入描述:
第一行有两个正整数n,m。
输出描述:
第一行一个整数,表示在m种石子中取出n个的排列方案数模1000000007后的值。
示例1
输入
复制
1 1
输出
复制
1
示例2
输入
复制
2 3
输出
复制
6
示例3
输入
复制
3 3
输出
复制
12
备注:
对于100%的测试数据: 1 ≤ n, m ≤ 1000 数据量较大,注意使用更快的输入输出方式。
思路:第一个石子有m种取法,其余的都是m-1中取法。
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define ll long long
ll dp[1020];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
dp[1] = m;
for(int i = 2; i <= n; i++)
dp[i] = (dp[i-1] * (m-1)) % mod;
printf("%lld\n",dp[n]);
}
''