比赛 20120706 评测结果 ATTTTTTTTA
题目名称 排队 最终得分 20
用户昵称 CC 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-07-06 11:43:32
显示代码纯文本
#include <cstdio>
#include <algorithm>
#define INF 1000000000
int n,K,tmp,ans;
int h[1005],t[1005][1005],a[1005];
bool done[1005];
void dfs(int u,int H) {
	if (u > n) {
		ans = std::min(ans,tmp);
		return;
	}
	for (int i = 2;i <= n;i++) 
		if (!done[i]) {
			if (H - h[i] >= K) return;
			tmp += t[a[u - 1]][i];
			a[u] = i;
			done[i] = 1;
			dfs(u + 1,std::max(H,h[i]));
			done[i] = 0;
			tmp -= t[a[u - 1]][i];
		}
}

int main() {
	freopen("queuea.in","r",stdin);
	freopen("queuea.out","w",stdout);
	scanf("%d%d", &n, &K);
	int minl = INF;
	for (int i = 1;i <= n;i++) {
		scanf("%d", &h[i]);
		if (h[i] < minl) {
			minl = h[i];
			a[1] = i;
		}
	}
	for (int i = 1;i <= n;i++)
		for (int j = 1;j <= n;j++) scanf("%d", &t[i][j]);
	tmp = 0;
	ans = INF;
	dfs(2,h[a[1]]);
	printf("%d\n", ans);
	return 0;
}