C++の奇妙なプリンター
奇妙なプリンターがあるとしましょうそれはいくつかの要件があります-
- プリンタは、毎回同じ文字のシーケンスのみを印刷できます。
- 各ターンで、プリンタは任意の場所で開始および終了する新しい文字を印刷でき、元の既存の文字をカバーします。
したがって、文字列が小文字で構成されている場合、私たちのタスクは、それを印刷するためにプリンターが必要とする最小回転数をカウントすることです。
したがって、入力が「aaabba」のような場合は、2ターンかかります。最初に、文字を置き換えてaaaaaを出力し、次にbを出力します。
これを解決するには、次の手順に従います-
- n:=sのサイズ
- nが0と同じ場合、0を返します
- 次数nxnの1つの2D配列dpを定義し、これを無限大で埋めます
- 初期化l:=1の場合、l <=nの場合、更新(lを1増やします)、実行-
- 初期化i:=0、j:=l --1の場合、j
- lが1と同じ場合、dp [i、j]:=1
- 初期化i:=0、j:=l --1の場合、j
- それ以外の場合、lが2と同じ場合、-
- dp [i、j]:=s[i]がs[j]と同じ場合は1、それ以外の場合は2
- それ以外の場合
- kを初期化する場合:=i、k
- temp:=dp [i、k] + dp [k + 1、j]
- dp [i、j]:=最小のdp [i、j]および(s[k]がs[j]と同じ場合はtemp– 1、それ以外の場合はtemp。
- kを初期化する場合:=i、k
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; const int INF = 1e9; class Solution { public: int strangePrinter(string s) { int n = s.size(); if(n == 0) return 0; vector < vector <int> > dp(n, vector <int>(n, INF)); for(int l = 1; l <= n; l++){ for(int i = 0, j = l - 1; j < n; i++, j++){ if(l == 1){ dp[i][j] = 1; }else if(l == 2){ dp[i][j] = s[i] == s[j] ? 1 : 2; }else{ for(int k = i; k < j; k++){ int temp = dp[i][k] + dp[k + 1][j]; dp[i][j] = min(dp[i][j], s[k] == s[j] ? temp - 1: temp); } } } } return dp[0][n - 1]; } }; main(){ Solution ob; cout << (ob.strangePrinter("aaabba")); }
入力
“2*”
出力
2
-
C++五胞体数
五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと
-
HP プリンタのセットアップ
この現代の世界では、さまざまな書籍、雑誌記事、研究資料、パワーポイント スライドなど、さまざまなものをコンピュータ、メモリ カード、Web サイト、USB 大容量ストレージなどから印刷する必要があります。これらのドキュメントやファイルを個人用または目的で印刷します。ビジネス目的 電子フォームから物理的な紙にファイルを印刷する作業を実行するのに役立つデバイスは、プリンターと呼ばれます。プリンターの人気と使用は日々増加しています。この需要の増加に対応するために、多くの有名なエレクトロニクス企業が現在、HP などのプリンターの設計に関与しています。 HP プリンターを購入した場合、または使用した