# week1-simple dp
## 經典 DP 例題
### Knapsack Problem 背包問題
給定一組物品,每種物品都有自己的重量和價格,在限定的總重量內,我們如何選擇,才能使得物品的總價格最高?
定義 $dp[i][j]$ 為看到第 $i$ 個貨物時有 $j$ 的空間被占據時的最大利潤。
```
#include<bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops")
#define io_o() ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define fst first
#define scd second
#define endl "\n"
#define pb push_back
#define ALL(x) x.begin(),x.end()
#define REP(i,n) for(int i = 0; i < n; i++)
#define print1d(a) {for(auto v: a) cout << v << " "; cout << endl;}
#define int ll
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
int32_t main(){
io_o();
int n;
while(cin >> n) {
vector<vi> dp(n + 1, vi(101));
int ans = 0;
REP(i, n) {
int v, c; cin >> v >> c;
REP(j, 101) {
dp[i + 1][j] = dp[i][j];
if(j + v <= 100)
dp[i + 1][j] = max(dp[i + 1][j], dp[i][j + v] + c);
ans = max(ans, dp[i + 1][j]);
}
}
cout << ans << endl;
}
return 0;
}
```
[https://zerojudge.tw/ShowProblem?problemid=b184](https://zerojudge.tw/ShowProblem?problemid=b184)
### Longest Common Subsequence(LCS) 問題
定義 $dp[i][j]$ 為 text1 的前 $i$ 個字符和 text2 的前 $j$ 個字符的 LCS 長度。
```
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int n = text1.size(), m = text2.size();
vector<vector<int>> dp(n + 1, vector<int>(m + 1));
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
if(text1[i - 1] == text2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;
else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
return dp[n][m];
}
};
```
[https://leetcode.com/problems/longest-common-subsequence/description/](https://leetcode.com/problems/longest-common-subsequence/description/)
## 個人練習
### 做題規則
1. 限時 5 小時,提早寫完即可提早交卷,沒 AC 所有題目不可提早交卷。
2. 不可以看此文件和 C++ docs 以外的文件。
3. 不會的題目在答題完成之後搞懂,會的題目也需要説明想法,因爲有些題目具備多種解法,仍需確認你有辦法用 dp 寫出此題。
4. 未按照題目難度排序,請盡量寫出更多的題目。
5. uva1626 請不要提交到 judge,我有改過輸出需求。
### 題目
#### uva1626
簡化題目:只需要輸出需要加入多少字符即可。
https://vjudge.net/problem/UVA-1626/origin
#### cses1633
https://vjudge.net/problem/CSES-1633/origin
#### uva11450
https://vjudge.net/problem/UVA-11450/origin
#### cf1447d
https://vjudge.net/problem/CodeForces-1447D/origin
#### cf180c
https://vjudge.net/problem/CodeForces-180C/origin
#### cf1027e
https://vjudge.net/problem/CodeForces-1027E/origin
#### cf540d
https://vjudge.net/problem/CodeForces-540D/origin