Codeforces 暑期特訓:我想成為演算法大師 - Week 4
From LI2 Contests Group
Contest 19. Dynamic Programming
C. Grasshoper-K
Problem: C. Grasshoper-K
Solution: GitHub Code
每格的種數由前面 1~k 格加總
1 | void solve() { |
E. Grasshopper and Money
Problem: E. Grasshopper and Money
Solution: GitHub Code
- 解題過程是先用 dp 把最大值求出來,再讓
dp同時存著最大路徑時走過的點 - 但是這個解法可能會 MLE,總共花了 86 MB(題目限制是 256 MB)
1 | void solve() { |
J. Milk in Bottles - K
Problem: J. Milk in Bottles - K
Solution: GitHub Code
- 開一個一維
dp陣列儲存不同n對應到答案的子問題,在轉移狀態時對每個容量的瓶子去裝,找數量最小的出來 dp[i]表示i的牛奶最少可以有幾瓶,所以此題所求即為dp[n]- 另外用一個
last_bottles陣列表示在當前狀態下,選擇哪個瓶子所對應到的子問題,得出的答案數量會最小
1 | void solve() { |
L. Array Filling
Problem: L. Array Filling
Solution: GitHub Code
每組 (i, j) 因倍數關係的時候都更新 dp
1 | void solve() { |
Contest XX. Greedy
C. Gifts
Problem: C. Gifts
Solution: GitHub Code
v用 pair 來存,分別存著每個物品的總消耗及票卷用下去時能少多少sort(v)讓總消耗越小的越先取,能讓取的數量最大化
1 | void solve() { |
E. Badgers
Problem: E. Badgers
Solution: GitHub Code
- 若總共取了
k個, 則第i隻的消耗為hi + gi * (k-1) - 最大化數量為
k個,所以做 for 迴圈去判斷k可以到多少還不會超過t
1 | void solve() { |