蓝桥杯2013翻硬币(洛谷P8597)问题详解

74 阅读1分钟

蓝桥杯2013翻硬币(洛谷P8597)问题详解:贪心算法的最优解法与实践 蓝桥杯翻硬币题 贪心算法实例 硬币翻转问题 算法竞赛题解 最小操作次数问题 洛谷P8597 第1张

一、题目解读

这道经典算法题要求将初始硬币序列通过最小操作次数转换为目标序列,每次操作必须翻转相邻的两个硬币。题目考察贪心算法的实际应用,是理解局部最优导致全局最优的典型案例。

二、解题思路

1.从左到右逐个比较当前硬币状态与目标状态

2.发现不同时立即翻转当前硬币和右侧相邻硬币

3.累计操作次数直到完全匹配目标序列

4.算法时间复杂度为O(n),空间复杂度O(1)

三、代码实现(带注释)

#include<iostream>
#include<string>
using namespace std;

int main()
{
string start; // 初始状态
string end; // 目标状态
cin >> start >> end;

text
Copy Code
int i = 0;     // 遍历指针
int times = 0// 操作计数器

while (start != end) {
    if (start[i] != end[i]) {
        // 翻转当前硬币
        start[i] = (start[i] == '*') ? 'o' : '*';
        // 翻转相邻硬币
        start[i+1] = (start[i+1] == '*') ? 'o' : '*';
        times++;
    }
    i++;  // 移动到下一个位置
}

cout << times;
return 0;


}

原文:蓝桥杯2013翻硬币(洛谷P8597)问题详解:贪心算法的最优解法与实践