unUnderstand
  • 板块灌水区
  • 楼主pengbonan
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/3 10:46
  • 上次更新2024/11/3 13:59:01
查看原帖
unUnderstand
1005693
pengbonan楼主2024/11/3 10:46

题目

#include <iostream>
#define I long long
#define C constexpr
#define Inf 1e10
#define int I
using namespace std;
C I N = 100 + 10;
int d[N][N], Low[N][N];
int f[N][N];
int n, q;
bool check (int day) {
	for (int i = 1; i <= n; i ++)
		for (int j = 1; j <= n; j ++)
			f[i][j] = d[i][j];
	for (int i = 1; i <= n; i ++) {
		int Tp = (day / n) + (day % n > i);
		for (int k = 1; k <= n; k ++) {
			f[i][k] -= Tp;
			if (f[i][k] < Low[i][k])
				f[i][k] = Low[i][k];
			f[k][i] -= Tp;
			if (f[k][i] < Low[k][i])
				f[k][i] = Low[k][i];
		}
	}
	for (int k = 1; k <= n; k ++)
		for (int i = 1; i <= n; i ++)
			for (int j = 1; j <= n; j ++)
				f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
	int Ans = 0;
	for (int i = 1; i <= n; i ++)
		for (int j = 1; j <= n; j ++)
			Ans += f[i][j];
	return Ans <= q;
}
signed main () {
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	cin >> n >> q;
	for (int i = 1; i <= n; i ++)
		for (int j = 1; j <= n; j ++)
			cin >> d[i][j];
	for (int i = 1; i <= n; i ++)
		for (int j = 1; j <= n; j ++)
			cin >> Low[i][j];
	int L = 0, r = 1e9, ans = -1;
	while (L <= r) {
		int mid = L + r >> 1;
		if (check(mid))
			r = mid - 1, ans = mid;
		else
			L = mid + 1;
	}
	cout << (ans == -1 ? ans : ans - 1);
	return 0;
}

为什么最后 ansans 要减去 11

2024/11/3 10:46
加载中...