Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define forn(i, n) for (int i = 0; i < int(n); i++)
- using namespace std;
- const int INF = 1e9;
- const long long INF64 = 1e18;
- const int N = 1000 * 1000 + 13;
- int n, m, k;
- int s[N], a[N];
- bool pos[N];
- int dp[N];
- int get(int l){
- forn(i, n + 1) dp[i] = INF;
- dp[0] = 0;
- forn(i, n){
- if (!pos[i]) continue;
- for (int j = i + 1; j <= min(n, i + l); ++j)
- dp[j] = min(dp[j], dp[i] + 1);
- }
- return dp[n];
- }
- int main() {
- scanf("%d%d%d", &n, &m, &k);
- forn(i, m) scanf("%d", &s[i]);
- forn(i, k) scanf("%d", &a[i]);
- forn(i, n + 1) pos[i] = true;
- forn(i, m) pos[s[i]] = false;
- long long ans = INF64;
- forn(i, k){
- long long t = get(i + 1);
- if (t != INF)
- ans = min(ans, a[i] * t);
- }
- printf("%lld\n", ans == INF64 ? -1 : ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement