HDU 5396 Expression ( 2015 Multi-University Training Contest 9)

本文分享了在编程合作中如何有效利用团队成员的想法,通过加粗加黑强调关键步骤,帮助理解复杂的算法过程。具体介绍了解决括号匹配问题的动态规划方法,包括状态转移方程的应用、考虑顺序问题以及优化方案个数的方法。同时,提供了代码实现思路和细节,旨在提高代码质量和团队协作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


感觉自己写的题解过几天再看还是太没什么大用处,应该有所侧重,加粗加黑,跳出这道题,找到这类题目的思维模式。


当时队友想到了解法。然后我就说对啊对啊。还漏了好多情况呢!就盲目在那里煽风点火。最棒的助攻应该是详细展开该题目的思路,每个关键的地方都给队友说明白。尤其是一些数据结构的使用。跟他说这个地方可以用这个,那个地方可以用那个。(啊做什么事都要果断一点啊机会转瞬即逝的啊)


题意:给你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]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值