# Chapter6.5
#### RNA Secondary Structure: Dynamic Programming over Intervals
## 定式
文字列: $B = b_1 b_2 \dots bn, b_i \in \{A,C,G,U \}$
RNAという遺伝子をモデル化したもの。RNAは塩基ごとにペアを作る。
以下の4つのルールを守った上で、文字列$B$に対してペアを生成する。このペアの集合を$S$とし、RNAの構造と呼ぶ。
- $b_i,b_j \ (i < j)$がペアであるとき$i < j - 4$
- かならず$(A,U), (C,G)$のどちらかのペアとなる
- $b_i$は2つ以上のペアを作らない
- ペアはそれぞれ線で繋がれると考えた時に、線が交差しない。言い換えると$(i,j),(k,l)$が存在し$i < k$ならば$i < k < j< l$とはならない。
ただし注意して欲しいのは$b_i$はかならずペアになるわけではない。ぼっちもいる。
## 目的
ペアの数を最大化する。
## アルゴリズム
### 最初のアプローチ
$OPT(j) := b_1 \cdots b_jでの最適解$
$j$に対して2つの操作が考えられる.
1. j番目はペアにならない.このとき$OPT(j) := OPT(j-1)$
2. j番目は$t < j - 4$ペアになるのいずれかとペアになる.
#### 2番について
$t$と$j$がペアとなるとき、$1,\cdots ,t -1$の任意の要素と$t+1, \cdots j -1$とペアになることはできない。
なので$OPT(j) = OPT(t -1) + [t + 1 からj -1での最大値]$。2つ目の項は定義されていない。
### 改善案
$OPT(i,j) := b_i , \cdots , b_j$での最大ペア数
### ベルマン方程式
$OPT(i,j) := max(OPT(i,j-1),1 + OPT(i,t - 1) + OPT(t + 1,j - 1)), for \ any \ t \in \{i, \cdots ,j-1\}$
### アルゴリズム
はい。やるだけ。algorithm designをみろ。
### ねこ
ねこ〜〜
### 計算量
$O(n^3)$