Pagini recente » Cod sursa (job #844965) | Cod sursa (job #2589062) | Cod sursa (job #1368548) | Cod sursa (job #1385328) | Cod sursa (job #1765909)
#include <iostream>
#include <fstream>
using namespace std;
int dp[1000001];
int val[1000001];
int d, n, k;
int min(int a, int b)
{
if (a < b){ return a; }
else { return b; }
}
int findl(int x)
{
int a, b, mid;
int m;
a = 1;
b = n;
while (a <= b)
{
if (val[(a + b) / 2] <= x)
{
m = (a + b) / 2;
a = (a + b) / 2 + 1;
}
else
{
b = (a + b) / 2 - 1;
}
}
return m;
}
int main()
{
ifstream in("zombie.in");
ofstream out("zombie.out");
int i;
in >> d;
in >> n;
in >> k;
for (i = 1; i <= n; i++)
{
in >> val[i];
}
dp[1] = 1;
for (i = 1; i <= n; i++)
{
if (dp[i] == 0)
{
if (dp[findl(val[i] + d - 1)] == 0)
dp[findl(val[i] + d - 1)] = dp[i-1] + k;
else
dp[findl(val[i] + d - 1)] = min(dp[findl(val[i] + d - 1)], dp[i-1] + k);
dp[i] = dp[i - 1] + 1;
}
else
{
if (dp[findl(val[i] + d - 1)] == 0)
dp[findl(val[i] + d - 1)] = dp[i-1] + k;
else
dp[findl(val[i] + d - 1)] = min(dp[findl(val[i] + d - 1)], dp[i-1] + k);
dp[i] = min(dp[i - 1] + 1, dp[i]);
dp[findl(val[i] + d - 1)] = min(dp[findl(val[i] + d - 1)], dp[i-1] + k);
}
}
out << dp[n];
}