効果の件名:入力したn個の文字列のみ大文字と小文字が含まれている、あなたは少なくとも、文字列を終了する必要がありますどのように多くの手順尋ねます。
問題解決のアイデア:使用DPの 思考、判断、大文字と小文字。
1の#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 INT T、L、DP [ 110 ] [ 2 ]。 4 文字列strの。 5 INTメイン(ボイド) 6 { 7 のscanf(" %dの"、&T)。 8 一方(T-- ) 9 { 10 CIN >> STR。 11 L = str.size()。 12 のmemset(DP、0x3fを、はsizeof(DP)); //初期DPアレイ 13は 、DP [ 0 ] [ 0 ] = 0、DP [ 0 [] 。1 ] = 1 ; // DP [0] [0]いいえプレスCapsLockキー、DP [0]を示していません[1]プレスCAPSLOCK表す 14 のために(INT Iは= 1 ; I <= L; I ++ ) 15 { 16 IF(STR [I- 1 ]> = ' ' && STR [I- 1 ] <= ' Z ' )//大文字場合 。17 { 18である DP [I] [ 1 ] =分(DP [I- 。1 ] [ 0 ] + 2、DP [I- 1 ] [ 1 ] + 1 ); //現在2つのケースがあり、一つは為のプレスCapsLockキー、プレスCapsLockのプラス2ではない、他のIS CapsLockキーは、これだけと一緒に使用に押し付け1。 19。 DP [I] [ 0 ] =分(DP [I- 1 ] [ 1。 +] 2、DP [I- 1 ] [ 0 ] + 2 )。上述したが、CAPSLOCKに開放しないように//同じ 20である } 21が 他//場合は小文字 で22 { 23は DP [I] [ 1 ] =分(DP [I- 1 ] [ 0 ] + 2、DP [ I- 1] [ 1 ] + 2 ); //上、しかし開放CapsLockキーになることを小文字 24 DP [I] [ 0 ] =分(DP [I- 1 ] [ 1 ] + 2、DP [Iを- 1 ] [ 0 ] + 1 ); //上、オープンCAPSLOCKなかった 25 } 26である } 27 のprintf(" %のD \ N- "、分(DP [L] [ 1 ] + 1、DP [L] [ 0 ])); //両方の場合に数字キーパッドを少なくともを得る 28 } 29 }