USACO算法系列十八——game1

来源:互联网 发布:linux系统安全软件 编辑:程序博客网 时间:2024/05/22 06:07

    题目:http://www.nocow.cn/index.php/Translate:USACO/game1

    很有趣的一道题目,两个人轮流从一串数字的两端拿数字,要求使自己拿到的数字总和最大。如果使用回溯的方法,限定不能保证最优的情况,即最优情况不知道怎么界定。

    可以用动态规划的思想来考虑,用MAP[i][j]表示,从i到j的数字串,自己能拿到的最大的数字和。那么有如下公式

    MAP[i][j] = sum[i][j] - min(map[i+1][j],map[i][j-1]); i 不等于j。(即,自己拿了一个数字以后,保证对方只能拿到比较少的。)

    MAP[i][j] = number[i] i == j时。

    sum[i][j]表示i 到 j,对number[]求和。

 

    测试结果如下:

     所以一定要注意思考题目的方式。要抽象,用数学的语言,最好是有规律的,明确的语言思考。

原创粉丝点击