// compile: g++ -o data data.cpp -O3 -std=gnu++20 -Wall -Wextra -Wshadow -D_GLIBCXX_ASSERTIONS -ggdb3 -fmax-errors=2 -DLOCAL
// run: ./data < data.in
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#ifdef LOCAL
#include <debug/codeforces.h>
#define debug(x...) {_variables(#x);_print(x);}
#else
#define debug(x...)
#endif
template<typename...Args> void print_(Args...args){((cout<<args<<" "),...)<<endl;}
#define rep(i,a,b) for(int i=(a);i<(int)(b);++i)
#define sz(v) ((int)(v).size())
#define print(...) print_(__VA_ARGS__);
#define INTMAX (int)(9223372036854775807)
#define INTINF (int)(1152921504606846976)
#define int long long
#define MAXN 5010
int dp[MAXN][MAXN], mc[MAXN][MAXN];
int a[MAXN], c[MAXN], x[MAXN];
int n, m;
int32_t main() {
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
memset(dp, 0xf, sizeof(dp));
cin >> n >> m;
rep(i, 1, n+1) cin >> a[i];
rep(i, 1, n+1) cin >> c[i];
rep(i, 1, n+1) {
mc[i][i] = c[i];
rep(j, i+1, n+1) mc[i][j] = min(mc[i][j-1], c[j]);
}
rep(i, 0, m) {
int t; cin >> t;
x[t] = 1;
}
dp[1][1] = a[1] + c[1];
if (!x[1]) dp[1][0] = 0;
rep(i, 2, n+1) {
rep(j, 0, i) {
dp[i][j+1] = min(dp[i][j+1], dp[i-1][j] + a[i] + mc[i-j][i]);
if (!x[i]) dp[i][j] = min(dp[i][j], dp[i-1][j]);
}
}
int ans = INTINF;
rep(i, 0, n+1) ans = min(ans, dp[n][i]);
cout << ans << endl;
return 0;
}
[1849]fg88 | Link vào chính thức và hướng dẫn chơi baccarat online,Truy cập fg88 để tải app fg88 nhanh chóng, nạp tiền casino qua Momo tiện lợi và khám phá mẹo quay hũ nổ hũ dễ thắng. Đăng ký tài khoản ngay hôm nay! visit: fg88
[8113]pt98: Link Alternatif Daftar Akun & Slot Gacor Deposit Dana,pt98 menyediakan link alternatif resmi untuk daftar akun dengan mudah. Nikmati slot gacor deposit dana serta download apk casino android sekarang juga. visit: pt98