小A抢劫了一家银行,现在他要做的就是打开金库的密码锁。密码是一串长度为n的小写字母,小A还以一个粗心的警卫那里得到了一张纸条, 上面有一则关于密码的线索,首先将字母a到z编号为0到25编号。纸条上共有n个整数ai,其中a1表示密码里第一个字母的编号,若i>1的话 就表示第i个字母和第i-1个字母编号的差值,例如,a2就代表密码中第一个字母个第二个字母编号的差值,若密码是acb,那么纸条上的数 字就是 0,2,1。小A决定找出与纸条中的数据相匹配的可能的密码的个数,现在请你帮助小4计算这个数字,由于结果可能很大,只需要输 出对1000000007取模后的结果即可。 输入描述 第一行输入一个正整数n,代表纸条上数字的个数 第二行给出n个整数ai,代表纸条上的数 1<=n<=10^5 0<=ai<=25 输出描述 在一行中输出可能的密码个数对 1000000007的余数 示例1 输入 1 4 输出 1
时间: 2023-12-06 20:41:16 浏览: 75
河南省银行业金融机构营业场所-金库-押运安全操作.doc
这是一道动态规划问题。设 $dp_i$ 表示考虑前 $i$ 个数,可以得到的可能的密码的数量。
对于第一个数,它可以是任意一个小写字母,所以 $dp_1=26$。
对于第 $i$ 个数,我们可以选择将其和前一个数合并,也可以单独作为一个字母。如果将其和前一个数合并,那么只有当前一个数的编号加上差值等于当前数的编号时,才能得到一个合法的密码。所以我们可以枚举前一个数的编号,如果前一个数的编号加上差值等于当前数的编号,那么将第 $i$ 个数和前一个数合并。如果不合并,那么第 $i$ 个数只能作为一个单独的字母,这时候 $dp_i$ 的值等于 $dp_{i-1}$。
最后,答案就是 $dp_n$。
时间复杂度 $O(n^2)$,可以通过本题。
代码如下:
阅读全文