字典序最小问题(贪心)
2018-02-27 15:15
357 查看
#include <bits/stdc++.h> using namespace std; const int MAX_N = 2000; /* 给定长度为N的字符窜S,要构造一个长度为N的字符串T。起初,T是一个空串,随后反复 进行下列任何操作。 1.从S的头部删除一个字符串,加到T的尾部 2.从S的尾部删除一个字符串,加到T的尾部 目标是要构造字典序尽可能小的字符串T。 限制条件: 1 ≤N ≤2000 字符串S只包含大写英文字母 输入: N = 6 S = "ACDBCB" 输出: ABCBCD(如下图所示进行操作) S="ACDBCB" ==>(开头) S="CDBCB" ==>(末尾) S="CDBC" ==>(末尾) S="CDB" T="" T="A" T="AB" T="ABC" ==>(末尾) S="CD" ==>(开头) S="D" ==>(开头) S="" T="ABCB" T="ABCBC" T="ABCBCD" */ int n; char S[MAX_N + 1]; void solve() { int a = 0, b = n - 1; while (a <= b) { bool left = false; for (int i = 0; a + i <= b; ++i) { if (S[a + i] < S[b - i]) { left = true; break; } else if (S[a + i] > S[b - i]) // 如果相等,就进行下一轮循环,往内靠拢继续比较 {// 如果左边小,从开头开始取,反之从末尾开始取 left = false; break; } } if (left) putchar(S[a++]); else putchar(S[b--]); } } int main() { scanf("%d%*c", &n); gets(S); solve(); return 0; }=============================我是一个反应迟钝的程序员====================================
相关文章推荐
- 字典序最小问题-贪心-Best Cow Line-POJ3617
- 贪心算法——字典序最小问题,Saruman‘s Army
- 贪心算法——字典序最小问题
- 字典序最小问题--贪心入门
- 字典序最小问题 前后删除加入 贪心poj3617
- 字典序最小问题 (贪心)
- leetcode 316. Remove Duplicate Letters 去除重复字符字典序最小字符串+贪心+递归
- bzoj 1196: [HNOI2006]公路修建问题(贪心+最小生成树)
- uva 10020 Minimal coverage(贪心-最小覆盖问题)
- ACM知识点 之 贪心(5)最小区间覆盖问题
- 步步为营(六)贪心(5)最小区间覆盖问题
- 字典序最小问题
- 字典序最小问题
- 字典序最小问题
- Stall Reservations 贪心+自定义优先级的优先队列(求含不重叠子序列的多个序列最小值问题)
- 51NOD 1255 字典序最小的子序列 【贪心】
- POJ 3617 Best Cow Line(贪心+最小字典序)
- 贪心专练3 最小标记数问题
- poj 3617字典序最小问题
- 字典序最小问题——Best Cow Line