感觉用 string 直接跑 LIS没问题哇,求大佬解答
查看原帖
感觉用 string 直接跑 LIS没问题哇,求大佬解答
230808
Zxsoul楼主2021/8/27 13:57

本题我直接用 string 按顺序得到每个子串,然后再用string 自动比较的性质直接跑 LIS 可是只有过了4个点,往后就 WA 了,不止什么原因

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int B=1e6+10;
string s[B];
string a;
int cnt;
int T;
int read() {int x;scanf("%d",&x);return x;}
int n;
int f[B];
void solve()
{
	n=read();
	cin>>a;
	cnt=0;
	for (int i=1;i<=B/10;i++) f[i]=1;
	for (int i=0;i<n;i++)
	{
		for (int j=i;j<n;j++)
		{
			s[++cnt]=a.substr(i,j-i+1); 
//			cout<<s[cnt]<<endl;
		}
	}
	f[1]=1;
	for (int i=1;i<=cnt;i++)
	{
		for (int j=1;j<i;j++)
		{ 
			if (s[j]<=s[i])
			{
				f[i]=max(f[i],f[j]+1);
			}
		}
	}
	int ans=1;
	for (int i=1;i<=cnt;i++) ans=max(ans,f[i]); 
	printf("%d\n",ans);
}
int main()
{
	T=read();
	while (T--) solve();
}
/*
1
6
sparky
*/
2021/8/27 13:57
加载中...