码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 1700*D. Flowers(DP&&前缀和&&预处理打表)


    Problem - 474D - Codeforces

    题意:

            有白花和红花两种,把 x 朵花排成一排,要求白花必须连续 k 个一块放置,则有 cnt 种情况。给出 a 和 b,计算a到b之间的 x 对应的 cnt 总和,并且对1e9+7取模。

    解析:

            考虑DP。

            当数量 x 小于 k 的时候,只能全部放置红花,只有一种情况。

            当数量 x 等于 k 的时候,则为两种情况,多了一种 x 朵花都为白花的情况(要求必须 k 朵连续放置)

            当数量 x 大于 k 的时候,如果最新的一朵花我们放置红色,则其情况数量等于前一朵的情况数量。如果如果最新的一朵花我们放置白色,则连续 k 朵都为白色,则情况数量等于 x-k 的情况。

    所以状态转移方程为 dp[ i ] = dp[ i-1 ]+dp[ i-k ],i>k

            综上所述,状态转移方程为

                                          dp[ i ] = 1,i>=1 && i

                                          dp[ i ] = 2,i==k

                                          dp[ i ] = dp[ i-1 ]+dp[ i-k ],i>k

            并且每次询问数据范围都为1e5,所以预处理前缀和。

            注意,因为每次都取模mod,可能导致最后答案小于 0 的情况,所以此时需要加一个mod。

    1. #include
    2. using namespace std;
    3. #define int long long
    4. const int N=1e5+5,mod=1e9+7;
    5. int t,k,dp[N],sum[N];
    6. signed main(){
    7. scanf("%lld%lld",&t,&k);
    8. dp[1]=1;
    9. for(int i=1;i<=k;i++){
    10. dp[i]=1;
    11. sum[i]=sum[i-1]+1;
    12. }
    13. dp[k]+=1;
    14. sum[k]+=1;
    15. for(int i=k+1;i<=1e5;i++){
    16. dp[i]=(dp[i-1]+dp[i-k])%mod;
    17. sum[i]=(sum[i-1]+dp[i])%mod;
    18. }
    19. while(t--){
    20. int a,b;
    21. scanf("%lld%lld",&a,&b);
    22. printf("%lld\n",(sum[b]-sum[a-1]+mod)%mod);
    23. }
    24. return 0;
    25. }
  • 相关阅读:
    【C++】面向对象编程(四)派生类
    python基本语法(元组、字符串、切片、集合、字典)
    java毕业设计基于javaweb+mysql数据库实现的大学生助学贷款管理系统(源码+论文+开题报告
    unable to find valid certification path to requested target
    ISP图像处理Pipeline
    Dummy estimators判别分析大比拼:性能、应用场景和可视化对比总结
    java部署教程
    中级软件设计师考试(软考中级)标准化和软件知识产权
    FPGA实现Avalon-MM接口通信
    力扣(LeetCode)315. 计算右侧小于当前元素的个数(2022.11.12)
  • 原文地址:https://blog.csdn.net/JungleZRD/article/details/133634852
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号