zoukankan      html  css  js  c++  java
  • 字典序最小问题(贪心)

    #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;
    }
    ========================================Talk is cheap, show me the code=======================================
    CSDN博客地址:https://blog.csdn.net/qq_34115899
  • 相关阅读:
    myEclipse Debug
    C# DataTable的詳細使用方法
    算法 《秦九韶算法java实践》
    【闲聊产品】之五:谁来背黑锅?
    ubuntu install mysql server method
    H264解码的一个測试程序
    Struts2自己定义拦截器实例—登陆权限验证
    【剑指offer】二叉树的镜像
    ubuntu12.04下搭建ftpserver
    C++Vector使用方法
  • 原文地址:https://www.cnblogs.com/lcy0515/p/9179835.html
Copyright © 2011-2022 走看看