贪心例题集

这篇博客汇总了多个使用贪心算法解决的ACM竞赛题目,包括POJ3617、POJ3069和POJ3253等,通过详细描述题意、思路和AC代码,展示了贪心算法在不同问题中的应用策略。每个题目都从最小化成本或最优化覆盖的角度出发,提供了解题的贪心思路和实现代码。
摘要由CSDN通过智能技术生成

贪心


POJ3617贪心


POJ3617

描述

给定长度为N的字符串s,要构造一个长度为N的字符串T。期初,T是一个空串。
然后以下操作:

  • 从S的头部删除一个字符,加到T的尾部。

  • 从S的尾部删除一个字符,加到T的尾部。

目标是要使构造的字典序尽可能小。

思路

  • 我们很容易想到每次就看字符串S的头尾,把小的删除掉放到T的尾部就好。但是存在一个问题,当头尾的字符一样的时候,就必须要比较下一个字符的大小。
  • 所以我们就建立把S反过来为S2,S2与S比较,S小就把S的头字符删除;反之就把S2的头字符删除。

AC代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;

    const int maxn = 2010;
    char s[maxn];
    char s2[maxn];
    char ans[maxn];
    int n;

    int strcmp(const char *src,const char *dst,int i,int j)
    {
        int flag = 0;
        for(; i < n && j < n ; i ++, j ++)
        {
            if(src[i] < dst[j])
                return 1;
            else if(src[i] > dst[j])
                return -1;
        }
        return 0;
    }

    int main()
    {
        cin >> n ;

        for(int i = 0; i < n; i ++)
        {
            cin >> s[i];
            s2[n-1-i] = s[i];
        }
        //cout<<s<<" "<<s2<<endl;

        //cout<<strcmp(s,s2,1,0)<<endl;

        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值