差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
最新のリビジョン両方とも次のリビジョン
programming_algorithm:contest_history:atcoder:2018:0825_arc101 [2020/03/16] – [解法] ikatakosprogramming_algorithm:contest_history:atcoder:2018:0825_arc101 [2020/03/17] – [解法] ikatakos
行 300: 行 300:
         0  1  2  3  4  左         0  1  2  3  4  左
  
-$(0,0)$ からスタートして、座標を「左右それぞれ移動させたことのある最大距離」と解釈して移動を行う。+$(0,0)$ からスタートして、座標を「左右それぞれ初期位置から移動させたことのある最大距離」と解釈して移動を行う。
 上か右のみに移動することになる。 上か右のみに移動することになる。
 +
 +実際の移動ではなく、最大距離な点に注意。(左→左→右)の移動は(2,1)でなく(2,0)である。(左→左→右→右→右)ではじめて、(2,1)となる。
  
 例えば $(2,2)$ のロボットは、下の点と右の点、いずれを通過するかで、左右どちらの出口から出るかが分かれる。 例えば $(2,2)$ のロボットは、下の点と右の点、いずれを通過するかで、左右どちらの出口から出るかが分かれる。
行 315: 行 317:
 これを踏まえて、以下のDPを考える。 これを踏まえて、以下のDPを考える。
  
-  * $DP[i][j]= (i-1,j)$ までの経路+  * $DP[i][j] = (i-1,j)$ まで移動したとき、下を先に通過したロボットと左を先に通過したロボットの組み合わせ
   * $DP[0][0] = 1$   * $DP[0][0] = 1$
  
 これは何を示すかというと、 これは何を示すかというと、
- +左までの距離が $i$ のロボットに関して、右までの距離が $j$ 以下のロボットを、$j$ より大きいロボットから出す」場合の組合せ数を示している 
-  * 出口までの距離が $i$ 以下のロボットだけを考える +$i-1$ 以前のロボットについては通った経路によって左も右もあり得るが、それらを踏まえた出口の組の個数を数え上げる。
-  * 座標 $i$ のロボットに関して、右出口までの距離が $j$ 未満のロボットを、$j$ 以上から出している +
-  $i-1$ 以前のロボットは通った経路によって左も右もあり得るが、それらを踏まえた出口の組の個数を示す+
  
 ただし $j$ については、必要無いのに無駄に右に進むことはせず、 ただし $j$ については、必要無いのに無駄に右に進むことはせず、
行 342: 行 342:
  
 $i=2$ のロボットのうち、$(2,4)$ について右から出そうと思えば、 $i=2$ のロボットのうち、$(2,4)$ について右から出そうと思えば、
-「(1,0)から4つ上がる」「(1,3)から1つ上がる」の経路がある。+「(1,0)から4つ上がる」「(1,3)から1つ上がる」の経路がある。これは、(1,3)を左右どちらに落としたかに相当する。
  
   右 4|     【2】o   右 4|     【2】o
行 474: 行 474:
 そのため、Pythonなら逐一割るより、MODを全く無視して計算して、最後に1回だけ割った方が高速となった。 そのため、Pythonなら逐一割るより、MODを全く無視して計算して、最後に1回だけ割った方が高速となった。
  
-割り算遅いっすね。いや、どちらかというと多倍長が(表面上は何の工夫もせずに書ける割に高速なのか。+割り算遅いっすね。いや、どちらかというと多倍長が(表面上は何の工夫もせずに書ける割に高速なのか。
  
programming_algorithm/contest_history/atcoder/2018/0825_arc101.txt · 最終更新: 2020/03/18 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0