2019年夏の牛オフ(質問やノートまで)練習試合

最初の

 

Eタイトル:ABBA

ボボは、文字「A」及び「B」成分による文字列の2(N + M)の長さを有しています。長さサブシーケンス2のそれに分解することができる(N + M)及び(N + M)配列番目、nはMの「AB」、および他の、それらの部分配列である:文字列も魅力的な特性を有しています"BA"など。

Q:今、nおよびm与え、私はあなたを求めることができる、上記の条件を満たした文字列の最大数を見つけることができますか?

問題の理解:タイトル、むしろ「サブ」よりも「配列」に分解することは、つまり、サブシーケンス2の長さが不連続であってもよいです。BBABAAとして、文字列は3「BA」を持っています。

 

2番目のフィールド

 

Hタイトル:長方形の第2大(1回Daquanの行列)

 Qは:NのXのMサイズの矩形形状の全体大面積によって要求された第二出力のバイナリ行列を考えます。

:1の連続する各2次元マトリクス、単調スタックの位置を算出します。(富栄チタン:丁デポ)

1つの#include <地図>
 2の#include <cmath>
 3の#include < ストリング >
 4の#include <cstdioを>
 5の#include <CStringの>
 6の#include <iostreamの>
 7の#include <アルゴリズム>
 8  の#define INF 0x3f3f3f3f
 9  使用して 名前空間をSTD;
10  のconst  int型 MAXN = 1E3 + 5 11  INTの和[MAXN] [MAXN]、スタック[MAXN]、N、M。
12  のint main()の
 13  {
 14      ストリングS。
15      しばらく(〜のscanf(" %dの%のD "、&​​N、&M))
 16      {
 17          のmemset(和、0はsizeof (M))。
18          のためにint型 i = 1 ; iが<= N; iが++ 19          {
 20              CIN >> S。
21              のためのint型 J = 0 ; J <Mであり、j ++ 22              {
 23                  であれば(S [J] == ' 0 ')の和[I]、[J + 1 ] = 0 ;
24                   [I] [J +合計1 ] =和[I] [J] + 1 25              }
 26          }
 27          INT M1 = 0、M2 = 0 28          スタック[ 0 ] = 0 29          のためにINT J = M; J> 0 ; j-- 30          {
 31              のintトップ= 0 32              スタック[ 0 ] = 0 33              のためにint型 I = 1を iが++; iが<= N 34             {
 35                  であれば(和[I] [J]> = 和[スタック[トップ] [J])
 36                      スタック[++トップ] = I。
37                  他の
38                  {
 39                      INT LEN。
40                      一方(和[I] [J] < 和[スタック[トップ] [J])
 41                      {
 42                          LEN = Iスタック[トップ1 ] - 1 43                          INT S =和[スタック[トップ] [J] * LEN。
44                          場合(S> M1)
 45                          {
 46                             M2 = MAX(M1、和[スタック[トップ] [J] *(len- 1 ))。
47                              M1 = S。
48                          }
 49                          他の 場合(S == M1)
 50                              M 2 = M1。
51                          他の 場合(S> M2)
 52                              、M2 =のS。
53                          top-- 54                      }
 55                      スタック[++トップ] = I。
56                  }
 57              }
 58             以下のためにint型私= 1 ; iがトップ= <; Iは++ 59              {
 60                  INT S =和[スタック[I]、[J] *(スタック[トップ] -stack [I- 1 ])。
61                  場合(S> M1)
 62                  {
 63                      M 2 = MAX(M1、和[スタック[I]、[J] *(スタック[トップ] -stack [I- 1 ] - 1 ))。
64                      M1 = S。
65                  }
 66                  他の 場合(S == M1)
 67                      M 2 = M1。
68                  他の 場合(S> M2)
 69                      、M2 =のS。
70              }
 71          }
 72          のprintf(" %d個の\ n " 、M2)。
73      }
 74      リターン 0 75 }
コードの表示

 

F题:パーティションの問題

Q:あなたは2人の* Nの個人を与え、すべての二人の価値間の競争があり、所有者間の競争の値は、2次元配列によって表されます。どのくらいの競争のための最大値を生成するために求めて、今、次の2つのチームに分かれ、これらの人々は、それぞれN-人は、2つのチームが競うようになりますか?

問題を理解する:2つのチームに分かれ、2 * Nの人々を、チーム内の同じ値のチームメイトとの間には競争、チームのメンバー、および値は、他のチームの各メンバー間の競争一度計算されません。

 

おすすめ

転載: www.cnblogs.com/Amaris-diana/p/11223337.html