PAT 1038 Recover the Smallest Number (30 分)贪心+cmp排序

1038 Recover the Smallest Number (30 分)
cmp比较将前面最小的字符串进行排序,排序后str[0]=a,即a+str[i]<str[i]+a,所以a在字符串s中一定放在最前面,不然对任意一个s中包含 str[i]+a的部分换成a+str[i]都会更小,确定a在最前面后,字符串s剩下部分同理,b应该排在剩下字符串中的最前面的位置,这样逐步确定最小的s,每一步都确定是最优(贪心)
贪心:贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。
贪心算法的基本思路:
1.建立数学模型来描述问题。
2.把求解的问题分成若干个子问题。
3.对每一子问题求解,得到子问题的局部最优解。
4.把子问题的解局部最优解合成原来解问题的一个解。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp0(string a,string b){
    return a+b<b+a;
}
int main(){
    int n;
    cin>>n;
    vector<string>str(n);
    for(int i=0;i<n;i++){
        cin>>str[i];
    }
    sort(str.begin(),str.end(),cmp0);
    string s;
    for(int i=0;i<n;i++){
        s+=str[i];
    }
    while(s.length()!=0&&s[0]=='0'){
        s.erase(s.begin());
    }
    if(s.length()==0)cout<<0;
    cout<<s;
    system("pasue");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值