[SNCPC2019] Digit Mode
前言
不管从实现方式到智慧程度都是数位
思路
首先你发现常规的数位
原因是不能对于一个数求出其
容易考虑到逆向思考, 你钦定
怎么做?
先考虑最简单的情况, 如果从
显然的是我们需要知道
知道了之前出现多少次, 我们可以计算出之后每个数字出现的最大限制, 具体的
设
这个是可以动态规划的, 具体怎么做类似于多重背包, 假设剩下的位数是
最终的方案数就是
知道了上面的方法, 我们首先用数位
从
中的数你可以随便填
就用上面的方法
然后就是注意对于未确定
从
中的数你可以随便填
也就是还在前导
递归到最深层就直接暴力计算, 复杂度证明见下
但是这个和上面「对于一个数求出其
」本质不是相同的吗? 为什么复杂度正确?
然而并不是, 因为上面的情况,
你发现数位
但是为什么这种做法下不会出现重复计算呢?
你把数位
其中红色表示还需要继续计算, 蓝色表示可以直接通过
发现原本会重复计算的部分, 都可以直接用
考虑其最终的复杂度
- 枚举
: - 每次确定
之后, 做 的次数 : 容易证明不超过
总时间复杂度
总结
正难则反
一种结合了数位
本质上是利用了数位
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】