热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ThePreliminaryContestforICPCAsiaShanghai2019F.Rhymescheme——DP

Thisway题意:题意不好说,反正就是你需要构造一个长度为n的序列,并且每个字符的大小最多是前面出现的最大的字符1,也

This way

题意:

题意不好说,反正就是你需要构造一个长度为n的序列,并且每个字符的大小最多是前面出现的最大的字符+1,也就是说ABC是被允许的,但是ACB是不被允许的,因为C之前没有出现过B,现在问你字典序第k大的是多少。

题解:

有点像康托展开,因为我们做到第i位的时候需要知道后面能够取到多少种情况,那么我们用dp[i][j]表示当前数为i的时候,后面有j位的情况数。
那么状态转移方程就是dp[i][j]=i∗dp[i][j−1]+dp[i+1][j−1]dp[i][j]=i*dp[i][j-1]+dp[i+1][j-1]dp[i][j]=idp[i][j1]+dp[i+1][j1]
因为我们在这一位是1-j的时候,可以当做这一位是j,因为下一位可以最大到第j+1位,也就是说,你后面能取的值的范围是从前面的最大的数决定的,而不是当前的数,当下一位取到i+1的时候,最大数就变成了i+1。
然后我们一位一位做,对于第i位的时候,我们之后能够取到的最大值当然是前面出现的最大的值的情况,也就是说ABCA的时候,下一位能够出现的最大的值是D,所以我们需要维护一个最大值,然后判一下情况数够不够即可。
注意它的情况数最大可以达到4e19+,所以需要用__int128.JAVA的大数会T,可能是不够优秀吧。
在这里插入图片描述

#include
using namespace std;
__int128 dp[30][30];
int ans[30];
char s[30];
int main()
{dp[26][1]&#61;26,dp[26][0]&#61;1;for(int j&#61;25;j;j--)dp[j][1]&#61;j&#43;1,dp[j][0]&#61;1;for(int i&#61;2;i<&#61;26;i&#43;&#43;){for(__int128 j&#61;25;j;j--){dp[j][i]&#61;j*dp[j][i-1]&#43;dp[j&#43;1][i-1];if(dp[j][i]>5e19)dp[j][i]&#61;5e19;}}int t,cas&#61;0;scanf("%d",&t);while(t--){int n;__int128 k&#61;0;scanf("%d%s",&n,s);int len&#61;strlen(s);for(int i&#61;0;i}


推荐阅读
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
author-avatar
静默的温柔结成思念
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有