

Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
Để giải quyết bài toán này, ta có thể dùng phương pháp quy hoạch động:
- Gọi dp[i] là số tiền ít nhất để đi i km.
- Dễ dàng nhận thấy rằng dp[i] = min(dp[i-1] + a[1], dp[i-2] + a[2], ..., dp[i-9] + a[9])
$\\$
Dưới đây là đoạn code tham khảo:
#include <iostream>
#include <algorithm>
#define N 1005
using namespace std;
int n, a[10], dp[N];
int main() {
cin >> n;
for (int i=1; i<=9; ++i) cin >> a[i];
for (int i=1; i<=n; ++i)
dp[i] = min({dp[max(i-1,0)]+a[1], dp[max(i-2,0)]+a[2], dp[max(i-3,0)]+a[3],
dp[max(i-4,0)]+a[4], dp[max(i-5,0)]+a[5], dp[max(i-6,0)]+a[6], dp[max(i-7,0)]+a[7],
dp[max(i-8,0)]+a[8], dp[max(i-9,0)]+a[9]});
cout << dp[n];
}
$\\$
$\\$
$\color{#ffd710}{\texttt{\{}} \color{#8655d6}{\texttt{\{}}\ \ \color{#8cdcda}{\text{Daoanhviet96}}\ \ \color{#8655d6}{\texttt{\}}} \color{#ffd710}{\texttt{\}}}$
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin