题目简化和分析:

k叉树,乍一看好像是树论,但我们通过分析条件,发现它每个阶段要做的事情一样,皆为:\(1\sim k\) 中选数字,这就很明显是DP。

\(\mathit{f}_{i,0}\) 表示和为 \(i\),但不满足至少一边 \(\ge d\)。

\(\mathit{f}_{i,1}\) 表示和为 \(i\),并且满足至少一边 \(\ge d\)。

\[\mathit{f}_{i,1}=\mathit{f}_{i,1}+\mathit{f}_{i-j,1}(j\le k)
\]
\[\mathit{f}_{i,0}=\mathit{f}_{i,0}+\mathit{f}_{i-j,0}(j < d)
\]
\[\mathit{f}_{i,1}=\mathit{f}_{i,1}+\mathit{f}_{i-j,0}(j\ge d)
\]
  • 方程一:因为已经满足,所以当 \(j\le k\) 都满足。
  • 方程二:当不满足,并且 \(j < d\),那么依旧不满足。
  • 方程三:当不满足,但是 \(j\ge d\),那么即可变为满足。

Solution:

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef double db; const int N=1e2+50;
const int M=1e5+50;
const int Mod=1e9+7; inline ll read(){
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
} ll n,k,d;
ll f[N][2];
int main()
{
n=read(),k=read(),d=read();
f[0][0]=1;
for(int i=1;i<=n;++i){
for(int j=1;j<=min((ll)i,k);++j){
f[i][1]+=f[i-j][1],f[i][1]%=Mod;
if(j<d)f[i][0]+=f[i-j][0],f[i][0]%=Mod;
if(j>=d) f[i][1]+=f[i-j][0],f[i][1]%=Mod;
}
}
printf("%lld\n",f[n][1]%Mod);
return 0;
}

CF431C的更多相关文章

  1. CF431C k-Tree dp

    Quite recently a creative student Lesha had a lecture on trees. After the lecture Lesha was inspired ...

  2. [CF431C]k-Tree

    题目描述 Quite recently a creative student Lesha had a lecture on trees. After the lecture Lesha was ins ...

  3. dp入门30题

    前言:本文章主要记录一些 \(dp\) 入门题,都是我做过的,希望读者能从这些基础题中打好 \(dp\) 扎实的基础,有不足的地方也欢迎指出.大部分是 \(CodeFoces\) 和 \(Atcode ...

随机推荐

  1. Windows 环境下Docker 安装伪分布式 Hadoop

    1.环境 Windows 11 Docker 20.0.2 2.拉取镜像 我选择 ubuntu20.04: docker pull ubuntu:20.04 然后我们用命令看一下本地镜像: docke ...

  2. 行行AI人才直播第7期:奇计AI创始人左晟《AI时代的商业挑战和机遇》

    行行AI人才是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台,是园子商业化努力的一个重要方向. 行行AI人才直播希望以直播的方式让大家更多了解AI行业的现状与未来可能的发展方向. 随着人工智 ...

  3. UE5打包SDK未正确安装的问题

    正文 Windows(笔者之前用的电脑是windows10,最新电脑使用的是windows11)下UE5打包项目的需要安装Visual Studio. 而且安装的时候需要选择上C++ 游戏开发相关模块 ...

  4. 如何不加锁地将数据并发写入Apache Hudi?

    最近一位 Hudi 用户询问他们是否可以在不需要任何锁的情况下同时从多个写入端写入单个 Hudi 表. 他们场景是一个不可变的工作负载. 一般来说对于任何多写入端功能,Hudi 建议启用锁定配置. 但 ...

  5. 在mapper.xml中遍历添加多条数据

    <insert id="saveAuditDf" parameterType="java.util.List"> insert into audit ...

  6. 伸展树(Splay)详解

    引入 在一条链中,二叉查找树的时间复杂度就会退化成 \(O(n)\),这时我们就需要平衡树来解决这个问题. \(Splay\)(伸展树)是平衡树的一种,它的每一步插入.查找和删除的平摊时间都是 \(O ...

  7. 行行AI人才直播第11期:墨尔本大学数据科学高级讲师-宫明明《机器学习:从统计到因果,人工智能的发展之路》

    行行AI人才是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台. 马克斯·普朗克智能系统中心主任曾在国际数学家大会进行了题为 From Statistical to Causal Learni ...

  8. vite — 超快且方便的编译工具

    我们编写的代码,比如 ES6. TypeScript.react 等是不能被浏览器直接识别的,需要通过 webpack .rollup 这样的构建工具来对代码进行转换.编译. 但随着项目越来越大,需要 ...

  9. 部署安装maven和mvnd

    前言 maven是常见的java构建工具,优点是稳定可靠,缺点是构建太慢,maven-mvnd是maven的强化版,致力于提高构建速度,默认情况下,mvnd 使用多核CPU并行构建. 常见的java构 ...

  10. c# .NET 高级编程 高并发必备技巧 - 锁

    锁 最为常见的应用就是 高并发的情况下,库存的控制.本次只做简单的单机锁介绍. 直接看代码: 每请求一次库存-1. 假如库存1000,在1000个人请求之后,库存将变为0. public int Re ...