字典序最小問題 (POJ3617)
阿新 • • 發佈:2018-12-10
給定一個長度為N的字串S,要構建一個長度為N的字串T。起初T是一個空的字串,隨後重複進行一下任意操作;
從S的頭刪除一個字元新增到T的尾部
從S的尾部刪除一個字元新增到T的尾部
目的:
使得T的字典序儘可能小
*字典序字典序是從前到後比較兩個字串大小的方法, 首先比較第一個字元,如果不同,則第一個字元較小的字串更小,如果相同則繼續比較第二個字元.......如此繼續,比較整個字串的大小
// 貪心演算法2 P 42 // #include "stdafx.h" #include<iostream> #include<math.h> #include <algorithm> #define MAX_N 6 using namespace std; int N=6; char S [MAX_N+1]; int a = 0; int b = N - 1; void solve() { 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--]); } putchar('\n'); } int main() { cout << "please input S\n"; cin >> S; cout << "this is T\n"; solve(); cout << S << endl; while (1); return 0; }