Lwebと文字列HDU - 5842(2016中国の大学プログラミングコンテスト - ネットワークトライアル)

 
水問題
 
Lwebは、文字列を持っています  S. 

Onedayは、彼が新しい順にこの文字列を変換することを決めました。 

あなたは彼が(厳密に増加)、最長LISを有する配列を取得するには、この変換を決定するのに役立つ必要があります。 

あなたは新しい番号にこの文字列内のすべての文字を変換する必要があります。 

Aは、  の文字の集合である  S、S  B Bは自然数の集合です。 

すべての射出  F →のBは、 法的な変換として扱うことができます。 

例えば、文字列「AABC」、  A = { B C }、   あなたは「1 2 3」に変換することができ、そして新しいシーケンスのLISは3です。 

今、あなたはから入手することができ、最長LIS見つけ、Lwebを助ける  S S. 

最長増加部分列:LISを。(https://en.wikipedia.org/wiki/Longest_increasing_subsequence)
 

入力

入力の最初の行は、整数含ま  T 1 T 20

そして Tラインは、i番目の行に文字列が含まれ、従っ Sは小文字のみを含む、長さ  S Sを超えません 105。

 

出力

各テストケースのために、出力シングルライン「ケース#X:Y」、xはケース番号であり、1およびYから出発して答えています。

 

サンプル入力

2 
aabccの
acdeaa

サンプル出力

ケース#1:3 
ケース#2:4

質問の意味:

この質問は、我々は状況が、半日何をすべきか分からないですが求めているどのように多くの異なる文字です



1の#include <stdio.hの>
 2の#include < ストリング・H>
 3  
4  int型のmain()
 5  {
 6      INT LEN、I、T、書籍[ 105 ]。
7      チャー [ 100005を]。
8      のscanf(" %dの"、&T)。
9      INT CAS = 0 、ANS。
10      一方(t-- 11      {
 12          のscanf(" %sの" 、A)。
13          ANS = 0;
14          LEN =のSTRLEN(A)。
15          のmemset(書籍、0はsizeof (書籍))。
16          のためには、(i = 0 ; iがLEN <; iは++ 17          {
 18              であれば(ブック[I] - ' ' ] == 0 19             {
 20の                  ANS ++ 21                  本の[I] - [ A ' ] = 1 22             }
 23         }
 24          のprintf(   " ケースは%d:%dは\ nを"、++ CAS、ANS)。
25      }
 26      リターン 0 27 }

 



おすすめ

転載: www.cnblogs.com/0xiaoyu/p/11370170.html