题意:正好跟上题导弹拦截相反,只不过单调递增而已。
解法:
就是上一题的a[j]>a[i]改成 a[j] < a[i]
然后记录每一趟的最大值就行了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int Max(int a,int b){return a>b?a:b;}
char s[10002];
int n,dp[20002],ans,T;
void input()
{
cin >> s;
n = strlen(s),ans = 0;
memset(dp,0,sizeof(dp));
}
void solve()
{
for(int i = 0 ; i < n ; i++)
{
dp[i] = 1;
for(int j = 0 ; j < i ; j++)
{
if(s[j] < s[i])
dp[i] = Max(dp[i],dp[j]+1);
}
ans = Max(dp[i],ans);
}
cout << ans << endl;
}
int main()
{
#ifdef H_R
freopen("in.txt","r",stdin);
#endif // H_R
cin.tie(false);
ios::sync_with_stdio(false);
while( cin >> T )
{
while(T--)
{
input();
solve();
}
}
return 0;
}