baidu A

题意:
求序列头尾为1的情况,中间n-1个数填充小于等于m的序列的个数

解题思路:
我们考虑DP[N]的情况,
比如{1a1a2....an-11}
那么对于从{a1 到 an-2}我们都有m-1种选择,即
那么对于{an-1}而言,
我们可能有m-1种选择(即它的前一位为1,最后尾也是1),
也可能是m-2种选择(即它的前一位不为1,最后尾是1)
那么我们先让他乘以(m-2),
那么少算的地方在哪里呢?当然是漏掉了前一位为1,最后尾也为1的这个情况
也就是{1a1a2...an-31an-11}
而这时候的{an-1}我们实际上已经遍历了m-2种情况,只剩下一种
自然也就剩下了{1a1a2...an-31}这种情况了,是不是发现了DP公式了?
那么我们可以写出DP公式:
DPn=m-1n-2*(m-2)+DPn-2
等比数列求和就行了
因为N非常大,所以要用nlogn的方法求等比

代码:
const int MO = 1000000007;
long long m, n;
long long powmod(long long a, long long b)
{
long long c = 1;
while (b>0)
{
if (b % 2 != 0)
c = c*a%MO;
a = a*a%MO;
b = b / 2;
}
return c;
}
long long T(long long m, long long n)
{
if (n <= 1) return 1;
long long TN2 = T(m, n / 2);
if (n % 2 == 0)
{
return (TN2 + powmod(m, n / 2) * TN2) % MO;
}
else
{
return (TN2 + powmod(m, n / 2) * TN2 + powmod(m, n - 1)) % MO;
}
}
int main(){
while (cin >> n >> m) {
if (n == 1) {
cout << "1" << endl;
}
else if (n == 2) {
if (m > 1)
cout << "1" << endl;
else
cout << "0" << endl;
}else{
if (m >= 2) {
ll ans = m - 2;
ll a = (m - 1) * (m - 1);
ll nn = (n - 1) / 2;
ans = T(a, nn);
if (n % 2 == 1)
cout << ans * (m - 1) % MO * (m - 2) % MO << endl;
else
cout << ans * (m - 2) % MO << endl;
//cout << sum(a, nn) << endl;
}
else
cout << "0" << endl;
}
}
return 0;
}
#百度#
全部评论
这是我的思路,希望大佬们多多指正。。。
点赞 回复 分享
发布于 2018-09-11 22:12
请问你投的什么岗位c++么?
点赞 回复 分享
发布于 2018-09-11 22:13
s(n) = s(n-1)*(m-2)+s(n-2)*(m-1);  这是普通的通项公式
点赞 回复 分享
发布于 2018-09-11 22:22
由于N非常的大,这个DP你不能直接for一圈,要求出等比通项公式,然后求和,得到答案的方法有两种: 1)直接等比求和公式,然后求逆元做出来 2)二分等比 我是用的二分等比
点赞 回复 分享
发布于 2018-09-11 22:32
楼主你的题意表述有问题吧,表示看不懂
点赞 回复 分享
发布于 2018-09-12 09:59
是这个思路,就是写不出来。。。
点赞 回复 分享
发布于 2018-09-12 10:05

相关推荐

10-28 11:04
已编辑
美团_后端实习生(实习员工)
一个2人:我说几个点吧,你的实习经历写的让人觉得毫无含金量,你没有挖掘你需求里的 亮点, 让人觉得你不仅打杂还摆烂。然后你的简历太长了🤣你这个实习经历看完,估计没几个人愿意接着看下去, sdk, 索引这种东西单拎出来说太顶真了兄弟,好好优化下简历吧
点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
440428次浏览 4493人参与
# 春招别灰心,我们一人来一句鼓励 #
41455次浏览 524人参与
# 北方华创开奖 #
107295次浏览 599人参与
# 地方国企笔面经互助 #
7923次浏览 18人参与
# 虾皮求职进展汇总 #
114057次浏览 883人参与
# 实习,投递多份简历没人回复怎么办 #
2453918次浏览 34847人参与
# 阿里云管培生offer #
119796次浏览 2219人参与
# 实习必须要去大厂吗? #
55665次浏览 960人参与
# 同bg的你秋招战况如何? #
75478次浏览 551人参与
# 提前批简历挂麻了怎么办 #
149813次浏览 1977人参与
# 投递实习岗位前的准备 #
1195668次浏览 18546人参与
# 你投递的公司有几家约面了? #
33178次浏览 188人参与
# 双非本科求职如何逆袭 #
661868次浏览 7394人参与
# 机械人春招想让哪家公司来捞你? #
157600次浏览 2267人参与
# 如果公司给你放一天假,你会怎么度过? #
4723次浏览 54人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11332次浏览 270人参与
# 发工资后,你做的第一件事是什么 #
12405次浏览 61人参与
# 工作中,努力重要还是选择重要? #
35599次浏览 384人参与
# 参加完秋招的机械人,还参加春招吗? #
20087次浏览 240人参与
# 实习想申请秋招offer,能不能argue薪资 #
39225次浏览 314人参与
# 我的上岸简历长这样 #
451915次浏览 8088人参与
# 非技术岗是怎么找实习的 #
155842次浏览 2120人参与
牛客网
牛客企业服务