风雪梦

柳絮因风起

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  4 Posts :: 76 Stories :: 3 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

搜索

  •  

最新评论

  • 1. re: LightOJ1080 Binary Simulation
  • 话说加个PushDown操作不就OK了咩?
  • --仗剑奔走天涯
  • 2. re: 正式开博
  • 加油!
  • --leafcloudsky
  • 3. re: 启航杯啊
  • 太屎了!!我竟然就这么的WA了两次,最终发现,第四题少了两句初始化,第五题把数组开错地方了,算法没问题,结果就这么从四题跌到二题,太伤不起了!!可怜我调spfa调了一晚上!!尼玛啊!!
  • --浅雨歌

阅读排行榜

评论排行榜

题目链接:http://poj.org/problem?id=3280

题目大意就是给你一个字符串,和字符串中每一个字母删除或者添加所需要付出的代价,问把它变成一个回文字串所需要的最少的代价。

首先明确一个问题,如果我们在字符串中某一个位置删除一个字符,那么一定能找到一个等价的添加的方法,所以可以把删除和添加统一到一起,然后这道题的状态就简单了。

dp[i][j]表示的是区间[i, j]内形成回文串所需要的最少的代价,这样我们就可以由一个单位字符向外扩展,状态转移方程就应该是dp[j][i] = min(dp[j + 1][i] + cost[s[j] - 'a'], dp[j][i - 1] + cost[s[i] - 'a']),另外如果区间的首尾字符都是一样的话,那么首尾字符全都删去还是一个回文串,这样一来再把两个代价做一个比较就可以了吧。

当然,其实最初的想法是扩展出来四个状态,就是首删除,首添加,尾删除,尾添加,由此扩展开来求一个最小值,不过看了一下解题报告,再加上和学长们YY一会儿,发现了可以统一的问题,就想出来了。

view code

posted on 2013-04-09 20:15 浅雨歌 阅读(173) 评论(0)  编辑 收藏 引用 所属分类: DP

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理