经典的贪心算法。 贪心算法的特点是总是取最优解,最后得到的也是最优,这一点上与动归不同。动归和搜索都是多策略的,所以贪心的理解难度还是很小的。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
#include<list>
using namespace std;
int n,a;
vector<char> ans;
int main() {
scanf("%d",&n);
char s[2500];
ans.clear();
char c = getchar();
for(int i=0;i<n;i++) {
char c = getchar();
s[i] = c;
c = getchar();
}
s[n] = '\0';
int star = 0,endd = n-1;
while(star<=endd) {
for(int i=star;i<=endd;i++) {
if(endd-(i-star)<i||i==endd) {
ans.push_back(s[star]);
star++; break;
}
if(s[i]==s[endd-(i-star)]) continue;
else if(s[i]<s[endd-(i-star)]) {
ans.push_back(s[star]);
star++; break;
}
else if(s[i]>s[endd-(i-star)]) {
ans.push_back(s[endd]);
endd--; break;
}
}
}
for(int i=0;i<ans.size();i++) {
printf("%c",ans[i]);
if((i+1)%80==0) printf("\n");
}
int t = ans.size();
if(t%80!=0)
printf("\n");
return 0;
}