码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • AtCoder Beginner Contest 279 G. At Most 2 Colors(计数/组合数学/dp递推)


    题目

    n(2<=n<=1e6)个格子,从左到右一字排开,

    现在需要给格子涂色,有c(1<=c<=1e9)种颜色,

    要求连续的k(2<=k<=n)个格子的颜色数最多只有2种,

    求方案数,答案对998244353取模

    思路来源

    TOYOTA SYSTEMS Programming Contest 2022(AtCoder Beginner Contest 279)(G.At Most 2 Colors容斥,DP,组合数学) - 知乎

    题解

    dp[i]表示长度为i的格子的合法涂色数,考虑第i个怎么放

    ①第i个前面k-1个位置有2种颜色,则第i个位置只能放这两种颜色中的一种

    用合法方案减只有一种的方法,即得两种颜色的方案数

    而只有一种颜色的方案数,等于f[i-k+1],

    此时,让中间的k-2个格子都和i-k+1涂一样的即可

    ②第i个前面k-1个位置仅有一种颜色,刚求过,f[i-k+1],

    此时,第i个位置有c种选择可以涂,

    dp[i]=(dp[i]-dp[i-k+1])*2+c*dp[i-k+1]

    当i-k+1<1时,相当于前缀没有限制,

    而目的是为了让这中间夹着的<=k-2个格子同色,

    此时方案数有c种,与dp[1]统一

    注意到c=1或2时,c-2<=0,可以特判,

    但代入式子后发现,可以和式子统一

    代码

    1. #include
    2. using namespace std;
    3. const int N=1e6+10,mod=998244353;
    4. int n,k,c,dp[N];
    5. int main(){
    6. cin>>n>>k>>c;
    7. dp[1]=c;
    8. for(int i=2;i<=n;++i){
    9. dp[i]=(2ll*dp[i-1]%mod+1ll*(c-2)*dp[max(1,i-k+1)]%mod)%mod;
    10. }
    11. cout<
    12. return 0;
    13. }

  • 相关阅读:
    使用css的transition属性实现抽屉功能
    【Spring】Spring的JdbcTemplate
    安装porterLB
    记录Centos7.9 安装mongodb 6.0 过程遇到的坑和解决办法
    分享从零开始学习网络设备配置--任务3.8 使用动态路由OSPF实现网络连通
    循环单链表的头插及尾插实现
    mybatisPlus的简单使用
    使用Python自动发送邮件
    【C++】哈希思想的应用——位图、布隆过滤器和哈希切割
    单片机——使用P3口流水点亮8位LED
  • 原文地址:https://blog.csdn.net/Code92007/article/details/128068982
  • 最新文章
  • 【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号