经典的贪心算法。 贪心算法的特点是总是取最优解,最后得到的也是最优,这一点上与动归不同。动归和搜索都是多策略的,所以贪心的理解难度还是很小的。
#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; }
原文地址:http://blog.csdn.net/weizhuwyzc000/article/details/44996621