Pagini recente » Cod sursa (job #2316635) | Cod sursa (job #2945191) | Cod sursa (job #106866) | Cod sursa (job #1443529) | Cod sursa (job #638063)
Cod sursa(job #638063)
#include <cstdio>
#include <fstream>
#define MAXN 1000010
using namespace std;
long long sol;
int D, N, K, A[MAXN], dp[MAXN];
inline int min(int a, int b) {
if(a < b) return a;
return b;
}
int main() {
// freopen("zombie.in", "r", stdin);
// freopen("zombie.out", "w", stdout);
ifstream fin("zombie.in");
ofstream fout("zombie.out");
fin >> D >> N >> K;
for(int i = 1; i <= N; i++)
fin >> A[i];
for(int i = 1; i <= N; i++)
dp[i] = 100000000;
dp[N] = 1;
int act, antact;
act = N;
for(int i = N - 1; i >= 1; i--) {
/*
for(int j = i; j <= N; j++) {
dp[i] = min(dp[i], dp[j + 1] + (j - i + 1));
if(A[j] - A[i] <= D)
dp[i] = min(dp[i], dp[j + 1] + K);
}
*/
dp[i] = dp[N + 1] + (N - i + 1);
while(A[act] - A[i] > D) {
dp[i] = min(dp[i], dp[act + 1] + (act - i + 1));
--act;
}
dp[i] = min(dp[i], dp[act + 1] + K);
}
fout << dp[1] << "\n";
return 0;
}