Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <vector>
- #include <algorithm>
- using namespace std;
- vector<int> res;
- vector<char> used;
- int n, k, d, l = 0;
- int minn = 2000000000;
- int a[6011];
- int f(vector<int> res) {
- sort(res.begin(), res.end());
- int c = 0;
- for (int i = 0; i < res.size(); ++i) {
- c+=a[res[i]];
- if (i > 0) {
- c += ((res[i]- res[i-1])-1)*d;
- }
- }
- return c;
- }
- void dfs() {
- int mc = 2000000000, c = 0;
- int top = 1;
- for (int i = 1; i <= l + 1; ++i) {
- if (!used[i]) {
- res.push_back(i);
- c = f(res);
- if (c < mc) {
- mc = c;
- top = i;
- }
- res.pop_back();
- }
- }
- used[top] = true;
- res.push_back(top);
- minn = mc;
- ++l;
- }
- int main() {
- cin >> n >> k;
- used.resize(n + k + 1);
- for (int i = 1; i <= n + k; ++i) {
- used[i] = false;
- cin >> a[i];
- }
- cin >> d;
- l = n;
- while(l < n+k) dfs();
- sort(res.begin(), res.end());
- if (minn != 2000000000) {
- cout << minn << endl;
- for (auto el : res) printf("%d ", el);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement