#CF2011C. 拆分表达式

拆分表达式

C. 拆分表达式 每个测试用例的时间限制:22 秒 每个测试用例的内存限制:512512 兆字节 给定一个形式为 <数字块>++<数字块>++\ldots++<数字块> 的字符串 ss。每个数字块包含至少 22 位且至多13 13 位数字;每个数字取值范围是 1199

你需要将这个字符串拆分成 <整数>++<整数> 形式的表达式。每个表达式必须是给定字符串的连续部分,并且给定字符串的每个字符都必须恰好属于一个表达式。例如,如果你有字符串 123+456+789+555123+456+789+555,那么:

允许将其拆分为 123+4123+456+756+789+55589+555;不允许将其拆分为 123+456123+456+789+555+789+555,因为第二部分以 + 号开头; 不允许将其拆分为 123+4123+456+756+7、8$ 和 9+5559+555,因为第三部分不包含 + 号; 不允许将其拆分为 123+456+78123+456+789+5559+555,因为第一部分包含两个 + 号。 在所有允许的拆分方式中,找到一种能使所有表达式结果之和最大的拆分方式,并输出这个和。

输入 第一行包含一个整数 t(1≤t≤100)—— 测试用例的数量。

每个测试用例由一行包含字符串s5s1000 s(5≤∣s∣≤1000)组成,字符串形式为 <数字块>++<数字块>++\ldots++<数字块>。字符串至少包含一个 + 号。每个数字块包含至少 22 位且至多 1313 位数字;每个数字取值范围是 1199

输出 对于每个测试用例,输出一个整数 —— 拆分字符串后所有表达式结果的最大可能和。

示例 输入

33 123+456+789+555123+456+789+555 13+3713+37 9999999999999+1111111111111+99999999999999999999999999+1111111111111+9999999999999 输出

834834 5050 2011111111111020111111111110 注释 在示例的第一个测试用例中,你应该将字符串拆分为表达式 123+456+7123+4、56+789+555 89+555。这些表达式结果的和是 834834

在示例的第二个测试用例中,给定的字符串已经是一个有效的表达式,不能再进一步拆分。