1.数位:
题意:给定正整数 N, P,你需要求出在 10N 以内,有多少回文数是 P 的倍数。 (n<=200,p<=1e5)
题解:
从回文数的中间向两侧 DP:记录 dp[i][j] 表示位数为 i 的回文数中,模 P 为 j 的
个数作为状态,转移时考虑在当前回文数的两侧填上一个相同的数字即可。
需要注意的细节是:
(1). 所求的回文数不能带有前导零
(2). 回文数的长度可以是奇数或者偶数
时间复杂度 O(N × P) 。
source:纯暴力30分
2.字典:
题意:
给定一个长度为 L 的,仅由 {A, B} 组成的字符串 T,表示一个对于前 L 个小写
字母的分类方法:即,Ti = A 表示第 i 个小写字母被分入了 A 类,否则为 B 类。
我们称一个由小写字母组成的字符串 S 是合法的,当且仅当:
(1). S 的长度为 N、(2). S 仅由前 L 个小写字母组成、(3). S 满足 M 条形如 (p1, t1, p2, t2) 的限制
其中,限制 (p1, t1, p2, t2) 的含义为:如果 Sp1 是 t1 类的,那么 Sp2 是 t2 类的。
给定一个长度为 N 的,仅由前 L 个小写字母组成,但不一定合法的字符串 R。你
需要求出字典序不小于 R 的,字典序最小的合法字符串
题解:看不懂,好像是模拟
3.用餐:
题意:给n盘菜,给出菜品做好的时间,和吃菜品的所需要的时间。求最早可以在什么时候吃下 Kk盘菜k。
题解:
固定一个菜的集合 S,按照 ai 从小到大的顺序可以最快地吃完集合 S。这是因为 ai 从小到大的顺序最小化了等待时间。
允许吃下一盘菜的一部分。在上面的例子中,如果 K = N, 那么我们不会闲置这段时间,而是会开始吃菜 x,从而导致得到的菜 y 开始吃的时间晚于其做好的时间。另一种观察这个过程的视角是,我们先吃了一段时间的菜 x,在菜 y 做好时进行切换,先开始吃菜 y,吃完 y 之后再回头把 x 吃完。
在任何时刻吃菜,都应选择可选的菜中用时最短的一盘。由此,我们可以唯一地确定新问题的最优策略,只需要将所有的菜按照 ai 排序,按照时间顺序模拟整个过程即可。找到可选的菜中用时最短的一盘的过程可以用堆进行加速。单组数据时间复杂度 O(N log N)
4.分配:
题意:题目就看不懂了呜呜。