Atcoder Educational DP Contest B - Frog 2
View as PDF
Submit solution
Points:
0.20 (partial)
Time limit:
2.0s
Memory limit:
1G
Input:
stdin
Output:
stdout
Suggester:
Problem source:
Problem type
Allowed languages
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch
Có ~N~ hòn đá, được đánh số từ ~1~ đến ~N~. Với mỗi chỉ số ~i~ ~(1 \le i \le N)~, độ cao của hòn đá thứ ~i~ là ~h_{i}~
Ban đầu, có một chú ếch đang ngồi ở hòn đá thứ nhất và chú sẽ thực hiện liên tục một loạt các hành động sau:
- Nếu chú đang ngồi ở hòn đá ~i~ chú có thể nhảy đến các hòn đá thứ ~i+1~, ~i+2~ ~...~ ~i + K~. Chú sẽ mất phí khi nhảy là ~|h_{i} - h_{j}|~ với ~j~ là hòn đá mà chú ếch nhảy đến.
Bạn hãy giúp chú ếch tìm chi phí tối thiểu để nhảy từ hòn đá thứ nhất đến hòn đá thứ ~N~ nhé.
Input
- Dòng đầu tiên của dữ liệu vào chứa hai số nguyên dương ~N~ và ~K~ ~(2 \le N \le 10^{5}, 1 \le K \le 100)~, lần lượt là số lượng hòn đá và giới hạn nhảy của ếch.
- Dòng thứ hai gồm ~N~ số nguyên ~h_{i}~ ~(1 \le i \le N, 1 \le h_{i} \le 10^{4})~, là độ cao của hòn đá thứ ~i~.
Output
- Gồm một số nguyên, là chi phí ít nhất để nhảy từ hòn đá thứ nhất đến hòn đá thứ ~N~.
Sample 1
Input
5 3
10 30 40 50 20
Output
30
Giải thích
Một đường đi tối ưu là: ~1 \rightarrow 2 \rightarrow 5~. Chi phí sẽ là ~|10 - 30| + |30 - 20| = 30~.
Sample 2
Input
3 1
10 20 10
Output
20
Giải thích
Một đường đi tối ưu là: ~1 \rightarrow 2 \rightarrow 3~. Chi phí sẽ là ~|10 - 20| + |20 - 10| = 20~.
Sample 3
Input
2 100
10 10
Output
0
Giải thích
Một đường đi tối ưu là: ~1 \rightarrow 2~. Chi phí sẽ là ~|10 - 10|= 0~.
Sample 4
Input
10 4
40 10 20 70 80 10 20 70 80 60
Output
40
Giải thích
Một đường đi tối ưu là: ~1 \rightarrow 4 \rightarrow 8 \rightarrow 10~. Chi phí sẽ là ~|40−70|+|70−70|+|70−60|=40~.
Comments
include<bits/stdc++.h>
using namespace std;
define vec vector
define ll long long
int i,j; int main(){ iosbase::syncwithstdio(0); cin.tie(0);cout.tie(0); int n,k;cin>>n>>k; vec<int>a(n),dp(n,INTMAX); for(int&x:a)cin>>x; dp[0]=0; for(i=0;i<n;i++){ for(j=1;j<=k;j++) if(i+j<n){ dp[i+j]=min(dp[i+j],dp[i]+abs(a[i]-a[i+j])); } else continue; } cout<<dp[n-1]; }
This comment is hidden due to too much negative feedback. Show it anyway.
include <bits/stdc++.h>
using namespace std;
define ll long long
const int maxn = 1000004; int f[maxn],b[maxn]; int main() { //freopen("DOANXE.INP","r",stdin); //freopen("DOANXE.OUT","w",stdout); iosbase::syncwith_stdio(false); cin.tie(NULL); int n , k; cin >> n >> k; int a[n]; for(int i = 0;i < n;i++){ cin >> a[i]; } f[0] = 0; for(int i = 1;i < n;i++){ f[i] = 1e9; for(int j = i - 1;j >= i - k;j--) { f[i] = min(f[i],f[j] + abs(a[i] - a[j])); } } cout << f[n - 1]; } ủa sao sai v ai chỉ giúp mình với .
Bài toán: Ếch nhảy qua các hòn đá Ý tưởng giải:
code vi du : code
This comment is hidden due to too much negative feedback. Show it anyway.
cho e xin sol ạ
This comment is hidden due to too much negative feedback. Show it anyway.
This comment is hidden due to too much negative feedback. Show it anyway.
ok
sao lại là 1e9 mới ac v mn
dp[i] có thể cộng dồn lên đến gần 1e9 thì để khỏi tạo 1e9 tính dp[i] = min(dp[i], giatri) cho de.
This comment is hidden due to too much negative feedback. Show it anyway.
cho e hỏi tại sao đặt min 1e5 lại sai mà 1e9 lại đúng ạ. Với h[i] <= 1e4 mà.