题意:
给出连个串,都只有01两个字符,从第一个串变到第二个串的最小操作数。
操作:
1、反转;2、全选;3、一个一个的选。
题解:
贪心找规律
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<vector>
#include<map>
using namespace std;
//typedef long long lld;
const int oo=0x3f3f3f3f;
//const lld OO=1LL<<61;
const int MOD=10007;
const int maxn=55;
char s1[maxn],s2[maxn];
int n;
int cal()
{
int ans=0;
for(int i=0;i<n;i++)
{
if(s1[i]!=s2[i])
ans++;
}
return ans;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
scanf("%s%s",s1,s2);
///先计算原串到目标串需要的步数
int a=cal();
///反转的串到目标串的步数
for(int i=0;i<n;i++)
s1[i]=1-(s1[i]-'0')+'0';
int b=cal()+1;
///全选串到目标串
for(int i=0;i<n;i++)
s1[i]='1';
int c=cal()+1;
///先全选在反选
for(int i=0;i<n;i++)
s1[i]='0';
int d=cal()+2;
int ans=min(min(a,b),min(c,d));
printf("%d\n",ans);
}
return 0;
}
/**
5
11001
00000
*/