動的計画法の核心:再帰関係の構築と理解
再帰関係の核心概念
再帰関係(または状態遷移方程式)とは、大きな問題をいくつかの部分問題に分解し、それらの部分問題の解を用いて大きな問題の解を導き出すための関係式です。DP配列の各要素は通常、特定の状態における問題の解を表し、再帰関係はこれらの状態間の変換方法を記述します。
再帰関係の特定手順
状態とその変化の分析:
問題 ...
6月10日 20:44 投稿
C++プログラミングコンテスト問題集と解答例
L1-1 挨拶出力
解法
指定されたテキストをそのまま出力する。
実装例
#include <iostream>
using namespace std;
int main() {
cout << "ありがとう!\\(>_<)/" << endl;
return 0;
}
L1-2 平均速度計算
実装例
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int distance, time;
cin & ...
6月10日 20:29 投稿
データ構造とアルゴリズムの実装テクニック
データ構造
TreeSetで特定の値より大きい最初の要素を検索
TreeSet<Integer> treeSet = new TreeSet<>();
Integer targetValue = treeSet.higher(searchKey);
2次元配列の降順ソート
Arrays.sort(2dArray, (first, second) -> (second[0] - first[0]));
最小ヒープの実装
PriorityQueue<int[]> minHeap = new PriorityQueue<>((arr1, arr2) ...
6月10日 18:00 投稿
FHQ-Treap の学習ノート
FHQ-Treap の学習ノート
Treap は Tree と Heap を組み合わせたデータ構造です。
Treap は弱いバランスの取れた二分探索木であり、カーネルツリーとして見なせます。各ノードには (Key, Value) という2つの値を持ち、Key は二分探索木の性質を満たし、Value はヒープの性質を満たします(通常は最小ヒープ)。Key は実際の情報であり、Value はランダムな値で、木の高さが ...
6月10日 16:59 投稿
データ構造:線形リスト
問題3156 【基礎15.例題1】生徒番号の照会
問題概要
最大2×106人の生徒が教室に入っており、それぞれの生徒番号(1〜109の範囲)が教室に入った順序で与えられる。その後、最大105回にわたって、何番目に教室に入ったかを尋ねる質問が行われる。各質問に対する答えを出力する必要がある。
入力形式
n m
s1 s2 ... sn
q1 q2 ... qm
nは生徒数、mは質問の回数を表す。siはi番 ...
6月8日 22:54 投稿
自作スネークゲームのメインシーン設計
スネークゲームを独自に実装する計画を立てました。以下はその概要です。
1. メインシーンは配列で表現し、xとy座標から配列のインデックスを計算します。各要素には現在の位置の種類や表示するグラフィックが格納されています。
2. スネークはリンクリストで表現され、各ノードには現在の座標や表示情報が保存されます。ヘッドノードには進行方向などの情報も含まれます ...
6月8日 21:55 投稿
ソート済み配列を平衡二分探索木に変換する方法
二分探索木の中間順走査は昇順シーケンスを生成します。問題で与えられた配列は昇順でソートされているため、この配列は二分探索木の中間順走査シーケンスであることが保証されます。
1. 二分探索木の中間順走査が与えられた場合、二分探索木を一意に決定できるか?
答えは否定的です。もし二分探索木の高さバランスを要求しない場合、任意の数字を根ノードとして選択で ...
6月8日 21:28 投稿
ソート済み2次元行列における効率的な要素探索
m x n のソート済み2次元行列から特定のターゲット値を効率的に探索するアルゴリズムについて考察します。
この行列は、以下の特殊な特性を持っています。
各行の要素は左から右へ昇順に並んでいます。
各列の要素は上から下へ昇順に並んでいます。
この特性を最大限に活用することで、ブルートフォース探索(O(mn))を避け、O(m+n)という線形的な時間計算量で高速な検索 ...
6月8日 20:25 投稿
Pythonプログラミング実践演習15問
10000までの数値で、5または6で割り切れるが両方で割り切れない数を探索する関数
def find_special_numbers():
result = []
for num in range(1, 10001):
if (num % 5 == 0 or num % 6 == 0) and num % 30 != 0:
result.append(num)
print(*result, sep=' ')
find_special_numbers()
リストの偶数インデックスにある要素の合計を計 ...
6月8日 20:08 投稿
アルゴリズム問題の解決法 - アルゴリズム思考
アルゴリズム思考のプロセス
この質問を立てているということは、あなたは既にアルゴリズムスキル向上の重要なステップを踏んでいるということです。
問題解決そのものが目的ではなく、「アルゴリズム思考のプロセス」が鍵となります。
以下の実践可能な「アルゴリズム思考トレーニングシステム」をまとめました。すぐに試してみてください:
一、考え方の変革:答えを探す ...
6月7日 19:34 投稿