C++ ACM。。。。。。。。。。。。

2024-11-30 13:38:00
推荐回答(2个)
回答1:

这个完全是做题做出来的,有些类型你见过了下次你拿着题目就能够看出来了.......
比如说经典题目 石子合并,相信这样的题目你已经做过了,而当你拿到比如一道这样的题目:pku 1179 polygon。你也能很快的看出题目实质上是动态规划。
也就是说各种模型的动态规划你都要试着去做一做。
当然有时候动态规划是不容易看出来的,这需要你分析问题可不可以划分为阶段性的问题来解决,最终的答案和前面的答案有什么联系,如果发现最后的答案可以由上一步得到,那么再考虑上一步的答案可不可以由它的前面的答案得到,如果可以的话,恭喜你了,你发现了该问题的最优子结构性和阶段性。
如果你是搞ACM主攻方向是动态规划的话,狂刷题吧,另外多阅读一些动态规划的OI集训队论文。如果你是搞OI的话,熟悉各种模型的动态规划是必要的,LRJ喜欢出动态规划和什么树之类的题目。

回答2:

你看到一个问题要是满足下面的两个特性,那么这个问题一定能用
动态规划解决。
1最优子结构性质。
也就是说子问题的最优解就是原问题的最优解。
2子问题重叠性,
动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其它的算法。
满足这两个就能用dp了。这个不是一个简单的知识,多研究就明白了。
dp这种方法可以解决很多很难解决的问题。