题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398

对于这种有点巧妙的递推还是总是没有思路...

设计一个状态 f[i] 表示第 i 位置上是公牛,那么 f[i] = ∑(0<=j<i-k) f[j];

再前缀和优化一下即可。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=1e5+,mod=;
int n,k,f[maxn],s[maxn];
int main()
{
scanf("%d%d",&n,&k);
f[]=;s[]=;
for(int i=;i<=n;i++)
{
f[i]=(s[max(,i-k-)])%mod;
s[i]=(s[i-]+f[i])%mod;
}
printf("%d",s[n]);
return ;
}

当然也可以用组合数:https://www.cnblogs.com/harden/p/6286182.html

(注意取模与 (ll) 与加括号的艺术...)

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
ll ans;
int n,k,mod=;
int pw(int a,int b)
{
int ret=;
for(;b;b>>=,a=((ll)a*a)%mod)
if(b&)ret=((ll)ret*a)%mod;
return ret;
}
int C(int n,int m)
{
int a=,b=;
for(int i=n-m+;i<=n;i++) a=((ll)a*i)%mod;
for(int i=;i<=m;i++) b=((ll)b*i)%mod;
return ((ll)a*pw(b,mod-))%mod;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)
{
int m=n-(i-)*k;
if(m<i)break;
ans=((ll)ans+C(m,i))%mod;
}
printf("%d",ans%mod);
return ;
}

最新文章

  1. CSS系列:CSS的继承与层叠特性
  2. 11.Configure Many-to-Many(配置多对多关系)【Code-First系列】
  3. 【转】 TechED2010与我(三) —— 初识云计算
  4. PerfMap – 显示前端网站性能的热力图插件
  5. ASP代码审计一枚
  6. C# WebApi传参之Get请求-AJAX
  7. POJ 2385 Apple Catching
  8. setTimeOut传参数(转)
  9. 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】
  10. [转载]typedef常见用法
  11. Python入门教程(2)
  12. Apache和PHP环境配置
  13. UVa 725 简单枚举+整数转换为字符串
  14. Docker for Web Developers目录
  15. IIS前端页面不显示详细错误解决方法
  16. python验证码识别接口及识别思路代码
  17. firefox镜像 和geckodriver驱动大全
  18. RFID系统 免费开源代码 开发,分享[申明:来源于网络]
  19. WPF中反转3D列表项
  20. Java基础—线程

热门文章

  1. vue基础---表单输入绑定
  2. ThinkPHP---TP功能类之分页
  3. APUE 文件IO
  4. ajax加载本地html文件出现 XMLHttpRequest cannot load的问题
  5. HDU 2082 母函数法
  6. Linux RAR 解压缩
  7. MEAN,从MONGO DB里弄出点东东来啦,以REST风格显示JSON
  8. HTTP自学心得
  9. group &amp; user
  10. BMP的图像处理