寒假刷题18:E2 - String Coloring (hard version)

题目链接:

String Coloring (hard version)

题目解析:

根据 狄尔沃斯定理  这道题其实就是在求最长的递减子序列

因为只有26个字符,直接暴力就行

AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[200003],maxx[200],maxxx=0,ans[200003],col;
char c;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        cin>>c;
        a[i]=c-'a'+1,maxxx=0;
        for(int j=a[i]+1;j<=26;j++)
            maxxx=max(maxxx,maxx[j]);
        ans[i]=maxxx+1,col=max(col,ans[i]);
        maxx[a[i]]=max(maxx[a[i]],maxxx+1);
    }
    cout<<col<<endl;
    for(int i=1;i<=n;i++)
        cout<<ans[i]<<" ";
    return 0;
}

 

发布了56 篇原创文章 · 获赞 22 · 访问量 6295
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章