感觉自己写的题解过几天再看还是太没什么大用处,应该有所侧重,加粗加黑,跳出这道题,找到这类题目的思维模式。
当时队友想到了解法。然后我就说对啊对啊。还漏了好多情况呢!就盲目在那里煽风点火。最棒的助攻应该是详细展开该题目的思路,每个关键的地方都给队友说明白。尤其是一些数据结构的使用。跟他说这个地方可以用这个,那个地方可以用那个。(啊做什么事都要果断一点啊机会转瞬即逝的啊)
题意:给你n个数字和对应的n-1个符号,让你找出所有匹配括号的方案,并求出他们的表达式得到的值,求和后mod 1E9 + 7.
题解:
1、i表示当前最右边的位置,j表示当前最左边的位置。dp[i][j] = dp[i][k] 操作 dp[k+1][j].
2、但是这种做法只适用于 操作= '*' 的时候。dp[i][j] = dp[i][k] * 后面那个表达式能得到的方案个数 +/- dp[k+1][j] * 前面那个表达式能得到的方案个数。用dpnum储存能得到的方案个数那就是 dpnum[i][j] = dpnum[i][k] * dpnum[k+1][j].
3、还有一个问题就是比如(4+6) × (3+7),先做4+6 再做3+7 和 先做3+7 和再做4+6 是不同哒。所以这里有一个顺序问题,算出来的dp值要乘一个顺序,假设是c数组,i表示操作左边那一堆有几次操作,j表示操作右边那一堆有几个操作,那么就是c[i][j] = c[i-1][j] + c[i][j-1]