码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 2022杭电多校九 1007-Matryoshka Doll(动态规划)


    题目链接:杭电多校九 - Virtual Judge
    题目:

     样例输入:

    1. 2
    2. 4 3 2
    3. 1 2 3 4
    4. 4 2 1
    5. 1 1 2 2

    样例输出:

    1. 3
    2. 2

    题意:有n个套娃,大小为a1<=a2<=……<=an,现在要将这些套娃分成k组,每组套娃按照大小排序后相邻两个套娃之间的大小差距要求>=r,求方案数。

    分析:设f[i][j]表示将前i个娃分成j组的合法方案数

    下面说一下递推方程怎么推导

    首先f[i][j]可以由i-1的两种情况转移而来,一种是前i-1个套娃分成了j-1组,第i个套娃单独成为一组的情况,另一种情况是前i-1个套娃分成了j组,第i个套娃放在已经分好的j组的其中一组里面,那么问题来了,我们应该把第i个套娃放在哪一组呢?换句话说是有多少组是可以放下第i个套娃的呢?只要是该组最大值小于等于a[i]-r,那么这一组就可以放下第i个套娃,而且我们能够知道对于套娃的大小在[a[i]-r+1,a[i]]的套娃,是不可能有两个或者多个套娃分在同一组的,一定是分在不同的组里面,那么也就是说大小介于[a[i]-r+1,a[i]]的套娃有多少个,那么就会有多少组是不能放第i个套娃的,不妨假设是x个,那么就会有j-x组是可以放第i个套娃的,那么这种情况对应的情况数就是f[i-1][j]*(j-x),x直接暴力求解就行,那么总的递推方程就是f[i][j]=(f[i-1][j-1]+1ll*f[i-1][j]*max(0,j-t))%mod。

    初始值就是f[0][0]=1.

    细节见代码:

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. using namespace std;
    10. const int N=5e3+10,mod=998244353;
    11. int f[N][N];//f[i][j]表示将前i个娃分成j组的合法方案数
    12. int a[N];
    13. int main()
    14. {
    15. int T;
    16. cin>>T;
    17. while(T--)
    18. {
    19. int n,k,r;
    20. scanf("%d%d%d",&n,&k,&r);
    21. f[0][0]=1;
    22. for(int i=1;i<=n;i++)
    23. {
    24. scanf("%d",&a[i]);
    25. int t=i-1;//t记录有多少个j满足a[j]-a[i]
    26. while(t&&a[i]-a[t]
    27. t=i-t-1;
    28. for(int j=1;j<=i;j++)
    29. f[i][j]=(f[i-1][j-1]+1ll*f[i-1][j]*max(0,j-t))%mod;
    30. }
    31. printf("%d\n",f[n][k]);
    32. }
    33. return 0;
    34. }
  • 相关阅读:
    面试算法22:链表中环的入口节点(2)
    Canal实现Mysql数据同步至Redis、Elasticsearch
    springcloud基于Spring Cloud的在线学习平台
    Spring最新核心高频面试题(持续更新)
    互联网摸鱼日报(2023-10-15)
    0829(041天 大数据01 概论)
    jmeter之连接MySQL数据库
    诸葛广告分析3大能力全面升级,新增巨量引擎渠道广告监测!
    SD NAND 为什么可以完胜T卡(tf卡/sd卡)?
    02Redis的命令行客户端和桌面客户端的下载和安装
  • 原文地址:https://blog.csdn.net/AC__dream/article/details/126372454
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号