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个岗位 >
点赞 评论 收藏
分享
11-08 17:36
诺瓦科技_HR
点赞 评论 收藏
分享
10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
手撕没做出来是不是一定挂
Chrispp3:不会,写出来也不一定过
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
442727次浏览 4513人参与
# 春招别灰心,我们一人来一句鼓励 #
42019次浏览 533人参与
# 阿里云管培生offer #
120294次浏览 2220人参与
# 地方国企笔面经互助 #
7964次浏览 18人参与
# 同bg的你秋招战况如何? #
76850次浏览 564人参与
# 实习必须要去大厂吗? #
55775次浏览 961人参与
# 北方华创开奖 #
107439次浏览 599人参与
# 虾皮求职进展汇总 #
115687次浏览 886人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11607次浏览 288人参与
# 实习,投递多份简历没人回复怎么办 #
2454766次浏览 34858人参与
# 提前批简历挂麻了怎么办 #
149907次浏览 1977人参与
# 在找工作求抱抱 #
906039次浏览 9421人参与
# 如果公司给你放一天假,你会怎么度过? #
4759次浏览 55人参与
# 你投递的公司有几家约面了? #
33207次浏览 188人参与
# 投递实习岗位前的准备 #
1195967次浏览 18550人参与
# 机械人春招想让哪家公司来捞你? #
157635次浏览 2267人参与
# 双非本科求职如何逆袭 #
662248次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12734次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35833次浏览 384人参与
# 简历中的项目经历要怎么写? #
86924次浏览 1516人参与
# 参加完秋招的机械人,还参加春招吗? #
20133次浏览 240人参与
# 我的上岸简历长这样 #
452024次浏览 8088人参与
牛客网
牛客企业服务