DTOJ#5154. 消失的运算符

题目描述

宫水三叶在教妹妹四则运算。她出了这样一道题:给定一个长度为 n n n 的合法运算表达式,求该表达式的值。

为了降低题目难度,三叶规定数字只有 1 ∼ 9 1\sim 9 19 ,运算符只有加号和乘号。

为了规范题目,三叶对合法的表达式做了以下规定:

  • 数字 1 ∼ 9 1\sim 9 19 是合法表达式。
  • 如果表达式 A A A 是合法表达式,那么 ( A ) (A) (A) 是合法表达式。
  • 如果表达式 A , B A,B A,B 是合法表达式,那么 A + B , A × B A+B,A\times B A+B,A×B 是合法表达式。
  • 以上三条规则可以构造出所有的合法表达式。

三叶把括号,数字,运算符等都做成了卡片,并摆出了表达式。

然而,不知道谁趁三叶不注意,把表达式中的运算符都取下来了。

三叶知道哪些位置有运算符,但是不知道每个运算符是什么。她只知道总共有 m m m 个运算符空位,而手上有 k k k 张加法的卡片和 m − k m-k mk 张乘法的卡片。

因此三叶想知道,对于所有可能的表达式,表达式的值的和是多少。

由于这个值很大,因此三叶只想知道其对 1 0 9 + 7 10^9+7 109+7 取模后的结果。

形式化题意

给定一个长度为 n n n 的表达式,表达式合法,并且只出现括号,减号和数字 1 ∼ 9 1\sim 9 19 。其中减号代表运算符的空位,设有 m m m 个。

给定 k k k ,你要把 k k k 个减号替换成加号,把 m − k m-k mk 个减号替换成乘号。求所有本质不同的替换方案表达式的和对 1 0 9 + 7 10^9+7 109+7 取模后的值。

第一行两个整数 n , k n,k n,k ,表示运算式长度和加号的个数。

第二行一个长度为 n n n 的字符串,表示运算式。

输出一行,表示所有可能出现的表达式的和对 1 0 9 + 7 10^9+7 109+7 取模后的结果。

样例输入 1
5 1
1-2-3
样例输出 1
12
样例解释 1

共有两个运算符,其中一个为加号。

共有两个合法的表达式:

  • 1 + 2 × 3 = 7 1+2\times 3=7 1+2×3=7
  • 1 × 2 + 3 = 5 1\times 2+3=5 1×2+3=5

因此答案为 7 + 5 = 12 7+5=12 7+5=12

样例数据 2,3

见下发文件。

本题采用捆绑测试,每个子任务 20 20 20 分。

对于所有数据,满足 1 ≤ n ≤ 1 0 5 , 0 ≤ m ≤ 2500 , 0 ≤ k ≤ m 1 \le n \le 10^5,0 \le m \le 2500,0 \le k \le m 1n105,0m2500,0km

保证给出的表达式合法。

子任务见下表:

子任务编号 m m m特殊性质
1 1 1 ≤ 20 \le 20 20
2 2 2 ≤ 300 \le 300 300
3 3 3 ≤ 2500 \le 2500 2500特殊性质 A
4 4 4 ≤ 2500 \le 2500 2500特殊性质 B
5 5 5 ≤ 2500 \le 2500 2500

特殊性质 A:满足 k = 0 k=0 k=0

特殊性质 B:保证表达式中不出现括号。

首先基础套路 即为去括号,转化为树上操作。。。

这时随便DP即可。。

代码:
咕咕咕

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值