漸化式《DP》

DPメニュー【2項間漸化式・特殊な2項間漸化式・3項間漸化式 各 1 〜 2】

【2項間漸化式 1】コード

reader.on('close', () => {
   const [x, d, k] = lines[0].split(' ').map(Number);
   const a = [x];  // 要素数 k 個の配列
   for (let i = 1; i < k; i++) {
      a[i] = a[i - 1] + d;  // 値が d ずつ増加
   }
   console.log(a[k - 1]);  // k 番目の値を出力
});
hogeちゃんの画像

a は値が d ずつ増加する 要素数が k 個の 配列 ですね。

【2項間漸化式 2】コード

reader.on('close', () => {
   const [x, d] = lines[0].split(' ').map(Number);
   const Q = Number(lines[1]);
   const a = [x];  // 要素数 1000個の配列
   for (let i = 1; i < 1000; i++) {
      a[i] = a[i - 1] + d;  // 値が d ずつ増加
   }
   for (let i = 2; i < Q + 2; i++) {
      const k = lines[i]-1;
      console.log(a[k]);  // k 番目の値を出力
   }
});
hogeちゃんの画像

要素数 1000 個の配列の値を漸化式で求めて a[k] の値を出力しています。

【特殊な2項間漸化式 1】コード

reader.on('close', () => {
   const [x, d1, d2, k] = lines[0].split(' ').map(Number);
   const a = [x];  // 要素数 1000個の配列
   for (let i = 1; i < k; i++) {
      i % 2 ? a[i] = a[i - 1] + d2 : a[i] = a[i - 1] + d1;  // a の要素の計算
   }
   console.log(a[k - 1]);  // k 番目の値を出力
});
hogeちゃんの画像

a は値が d1 または d2 ずつ増加する 要素数が k 個の 配列 ですね。

【特殊な2項間漸化式 2】コード

reader.on('close', () => {
   const [x, d1, d2] = lines[0].split(' ').map(Number);
   const Q = Number(lines[1]);
   const a = [x];  // 要素数 1000個の配列
   for (let i = 1; i < 1000; i++) {
      i % 2 ? a[i] = a[i - 1] + d2 : a[i] = a[i - 1] + d1;  // a の要素の計算
   }
   for (let i = 2; i < Q + 2; i++) {
      const k = lines[i]-1;
      console.log(a[k]);  // k 番目の値を出力
   }
});
hogeちゃんの画像
要素数 1000 個の配列の値を漸化式で求めて a[k] の値を出力しています。

【3項間漸化式 1】コード

reader.on('close', () => {
   const k = Number(lines[0]);
   const a = [1, 1];  // 要素数 1000個のフィボナッチ数列
   for (let i = 2; i < k; i++) {
      a[i] = a[i - 2] + a[i - 1];  // フィボナッチ数列の計算
   }
   console.log(a[k - 1]);  // k 番目の値を出力
});
hogeちゃんの画像

a[i] の値は a[i - 2] + a[i - 1]になっています。これは フィボナッチ数列と呼ばれる有名な数列だそうです。

【3項間漸化式 2】コード

reader.on('close', () => {
   const Q = Number(lines[0]);
   const a = [1, 1];  // 要素数 1000個のフィボナッチ数列
   for (let i = 2; i < 40; i++) {
      a[i] = a[i - 2] + a[i - 1];  // フィボナッチ数列の計算
   }
   for (let i = 1; i <= Q; i++) {
      const k = lines[i] - 1;
      console.log(a[k]);  // k 番目の値を出力
   }
});
hogeちゃんの画像

要素数 40 個の フィボナッチ数列 を漸化式で求めて a[k] の値を出力しています。

コメント