注意边界条件的应用,低位与高位交叉,低位和高位相等。
该算法的思想是,一个回文串的高位和低位必然相等,我们可以把大问题分解成小问题,从而得到回文串。最开始我的想法是链表加bfs。。。。
#include <iostream>
#include <queue>
using namespace std;
int const maxn = 100;
int a[maxn];
int f(int lo, int high) {
if(lo>=high) return 0;
int k = 0;
while (a[lo]!=a[high]) {
if (a[lo]<a[high]) {
a[lo+1] = a[lo]+a[lo+1];
lo++;
k++;
} else {
if (a[lo]>a[high]) {
a[high-1] = a[high] + a[high-1];
high--;
k++;
}
else {
return k+f(lo+1,high-1);
}
}
}
if (lo<high) return k+f(lo+1,high-1);
else return k;
}
int main() {
int n;
cin>>n;
for (int i=0;i<n;i++) {
cin>>a[i];
}
cout<<f(0,n-1);
}