นิยามให้ เป็นต้นทุนน้อยที่สุดที่จะสร้างหอคอยโดยที่สนใจเพียงแค่ตารางเริ่มตั้งแต่ ขึ้นไป และ ได้สร้างหอคอยที่ตำแหน่ง และ ไปแล้ว
โดยที่ เพื่อที่จะให้ในทุกช่วง มีอย่างน้อยสองหอคอยเสมอ
หากเราคำนวณตาราง โดยตรงจะใช้ ซึ่งจะช้าเกินไปสำหรับ
กำหนดให้ โดยที่ ดังนั้นเราจะสามารถเปลี่ยนสมการ เป็น ได้ ซึ่งจะทำให้เราสามารถคำนวณ และ ไปพร้อมๆกันได้ใน
Time-complexity:
int solve() { for(int x = n; x >= 1; x--) { for(int y = x + 1; y <= n; y++) { dp[x][y] = best[y][min(n, x + K)]; } best[x][x] = inf; for(int i = x + 1; i <= n; i++) { best[x][i] = min(best[x][i - 1], dp[x][i] + cost[i]); } } int ans = inf; for(int x = 1; x <= k - 1; x++) { for(int y = x + 1; y <= k; y++) { ans = min(ans, dp[x][y] + cost[x] + cost[y]); } } return ans; }