Codeforces Round #617 (Div. 3), problem: (E2) String Coloring (hard version) 【贪心】

题意

意思和E1一样 只不过可以用不同的颜色,要求用的颜色越少越好

思路

我们由E1知道 要两个非严格递增序列组成即可

那么E2就是看序列能不能由ans个非严格递增序列组成 ans越小越好
那么就一直找即可

code

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int maxn=200+5;
int n;
string s;
int vis[maxn];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n;
    cin>>s;
    vector<int> v(n,0);
    int k=0,ans=1;
    while(k<n){
        char ch='a';
        for(int i=0;i<n;i++)
            if(!v[i]&&s[i]>=ch) ch=s[i],v[i]=ans,k++;
        ++ans;
    }
    cout<<ans-1<<endl;
    for(int i=0;i<n;i++) cout<<v[i]<<" ";
    return 0;
}
学如逆水行舟,不进则退
发布了491 篇原创文章 · 获赞 1203 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/weixin_42429718/article/details/104190114