# Quy hoạch động
## Bài toán Balo
### Đề bài
Có $n$ món đồ, mỗi món có khối lượng $w_i$ và giá trị $v_i$. Hãy chọn ra một số món đồ để xếp vào một cái balo có thể chứa khối lượng tối đa là $W$ sao cho có tổng giá trị cao nhất.
### Nhận xét
Món đồ lựa vào balo phụ thuộc 2 yếu tố: số vật được xét và khối lượng các vật. Vậy nên ta có bảng phương án 2 chiều.
### Cài đặt
```cpp
for (int i=0;i<n;i++){
for (int j=0;j<=W;j++){
if (w[i]<=j){
f[i][j]=max(f[i-1][j],v[i]+f[i-1][j-w[i]]);
}
else{
f[i][j]=f[i-1][j];
}
}
}
```
## Bài toán dãy con đơn điệu dài nhất
### Đề bài
Cho dãy $a_1, a_2, ..., a_n$. Tìm dãy con tăng có nhiều phần tử nhất.
### Nhận xét
Vì độ dài dãy con chỉ phụ thuộc vào một yếu tố là dãy ban đầu nên ta có bảng phương án 1 chiều.
### Cài đặt
```cpp
for (int i=0;i<n;i++){
f[i]=1;
for (int j=0;j<i;j++){
if (a[i]>a[j]){
f[i]=max(f[i],f[j]+1);
}
}
}
```