W+T
查看原帖
W+T
571546
qiutianqwq楼主2022/5/14 18:22
#include <bits/stdc++.h>
using namespace std;

long long a[1000005], vis[1000005], n, c, p, m, s[1000005], ans;

void dfs (long long sum, long long d, long long y)
{
	if (d == m)
	{
		if (sum < ans)	ans = sum;
		return;
	}
	if (sum >= ans)	return;
	for (int i = 1; i <= m; i++)
	{
		if (vis[s[i]] == 1)	continue;
		vis[s[i]] = 1;
		dfs (sum + a[y] - 2 * a[s[i]] + c, d + 1, s[i]);
		vis[s[i]] = 0;
	}
}

int main ()
{
	scanf ("%d%d%d", &n, &c, &p);
	for (int i = 1; i <= n; i++)	scanf ("%d", &a[i]);
	while (p--)
	{
		ans = INT_MAX;
		memset (vis, 0, sizeof (vis));
		memset (s, 0, sizeof (s));
		scanf ("%d", &m);
		for (int i = 1; i <= m; i++)	scanf ("%d", &s[i]);
		for (int i = 1; i <= m; i++)
		{
			vis[s[i]] = 1;
			dfs (0, 1, s[i]);
			vis[s[i]] = 0;
		}
		printf ("%d\n", ans);
	}
	return 0;
}
2022/5/14 18:22
加载中...