题目描述
思路
个人觉得用到了贪心算法,求局部最优解即只要当前硬币状态和目标硬币不一样,那就翻,目的是为了和目标一样,“没有多余步骤”,即这就是求的最小状态
代码
模拟翻硬币的操作,代码其实挺简单的,关键是想不想出来这是贪心
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
char ori[N], aim[N];
void turn(int x)
{
if(ori[x] == '*')
ori[x] = 'o';
else
ori[x] = '*';
}
signed main()
{
cin >> ori>>aim;
int n = strlen(ori);
int ans = 0;
for(int i = 0; i < n; i++)
{
if(ori[i] != aim[i])
{
turn(i);
turn(i + 1);//越界不影响,因为数组开的足够大
ans++;
}
}
cout<<ans<<endl;
return 0;
}
总结
关键是要理解“如何找到最优步骤” ⇒ 贪心
以及如何用代码实现:只要当前状态和目标状态不一样,就修改