贪心算法
昨天参考别人的AC了, 今天再来分析一下
1、贪心的前提是排序,把田忌马序列和国王马序列都由小到大排序是解决问题的第一步
2、排序后开始比较
设置四个状态指针,田忌min,, 田忌max, 国王min, 国王max;胜局数 win = 0;
for ( 一共比较n次,所以循环n次)
首先比较最慢的马
if ( 田忌min > 国王min ) { 直接比较,田忌和国王指针前移,win++ }
else {
// 此时田忌最慢的马比国王最慢的马慢或速度相等,如果直接比要么输一局损失200元要么平局,如果田忌这一局一定要输就要把国王最快的马消耗掉,
此时最快的马指的是比当前田忌最快的马还快,即,国王的马中使田忌一定会输的最快的马,所以要先比较双方最快的马
if ( 田忌max > 国王max ) {直接比较,田忌和国王指针前移,win++ }
else if ( 田忌min < 国王max ) {直接比较,田忌和国王指针移动,win-- }
}
其实为了便于理解,我当初还做了一张表

本文详细分析了杭电OJ1052题目的贪心解法,首先通过排序确定田忌和国王马匹的序列,然后比较每轮比赛。当田忌的最慢马大于国王的最慢马时,田忌赢得一局;否则,田忌需尽可能消耗国王的最快马以减少损失。通过比较各种情况,最终得出获胜策略并给出代码实现。

1860

被折叠的 条评论
为什么被折叠?



