1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 二次元DPメニュー(言語選択)
  4. 問題一覧 F#(Beta)編
  5. 二次元 dp 応用 2 F#(Beta)編

二次元DPメニューのサムネイル
二次元 dp 応用 2 F#(Beta)編(paizaランク A 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

長さ N の数列 A = (A_1, A_2, ... , A_N) が与えられます。
数列 A の部分列であってすべての隣り合う要素の差の絶対値が K 以下であるもののうち、長さが最大であるものの長さを出力してください。
ただし、数列の部分列とは、その数列から順番を変えずに一部の要素を取り出したものを指します。

入力例 1 では、部分列 [9, 12, 8] はすべての隣り合う要素の差の絶対値が 4 以下です。
長さ 4 以上で隣り合う要素の差の絶対値が 4 以下である部分列は存在しないため、3 を出力します。

入力される値

入力は以下のフォーマットで与えられます。

N K
A_1 A_2 ... A_N


・1 行目には、数列の長さを表す整数 N、部分列の要素の差の絶対値の最大値 K が与えられます。
・2 行目には、数列の各要素が空白区切りで与えられます。
・入力は合計で 2 行からなり、入力値最終行の末尾に改行が 1 つ入ります。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

数列 A の部分列であって、すべての隣り合う要素の差の絶対値が K 以下であるもののうち、長さが最大であるものの長さを出力してください。
最後は改行し、余計な文字、空行を含んではいけません。

条件

すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ N ≦ 3000
・1 ≦ K ≦ 10^9
・1 ≦ A_i ≦ 10^9
・A_i ≠ A_j (i ≠ j)

入力例1

5 4
9 12 1 29 8

出力例1

3

入力例2

10 1000000000
836199702 858585251 900394206 501110054 472948995 225543905 653448045 771310909 170671965 903178564

出力例2

10

問題一覧へ戻る

ページの先頭へ戻る