描述
从3月31号开始,丰庭餐厅给同学们准备了丰盛的晚餐,菜品有麻辣烫,香锅鸡,烤鱼等共k种菜品,满足你蠢蠢欲动的胃。假设你的餐桌上摆放了n个盘子,每个盘子有且只能放1个菜,相邻的盘子最多连续两个菜品相同。求你在桌子上能够摆放菜的方式(个数)。
输入
盘子个数n和菜品种类k,(1<=n<=1000),(1<=k<=1000)
输出
请输出全部的满足要求的菜摆放数量(mod 1e9+7)
输入样例 1
2 2 3 3
输出样例 1
4 24
#include<iostream>
using namespace std;
const int N = 1010, mod = 1e9 + 7;
int n, m;
long long f[N][2];
int main()
{
while (scanf("%d%d", &n, &m) != EOF) // 注意,不能只写 scanf("%d%d", &n, &m)
{
f[1][0] = m;
f[1][1] = 0;
for (int i = 2; i <= n; i++)
{
f[i][0] = (f[i - 1][0] + f[i - 1][1]) * (m - 1) % mod;
f[i][1] = f[i - 1][0];
}
int ans = (f[n][0] + f[n][1]) % mod;
printf("%d\n", ans);
}
return 0;
}