TLE70 求助

P3337 [ZJOI2013] 防守战线

现在是 90. 改为了 ```cpp for (int i = 1; i <= n; i++) { if (a[i] > eps) { if (c == -1 || a[i] > a[c]) c = i; } } ```
by TernaryTree @ 2023-12-12 22:38:11


重构代码之后过了 ```cpp #include <bits/stdc++.h> #define int long long using namespace std; typedef double db; const int maxn = 1e3 + 10; const int maxm = 1e4 + 10; const db eps = 1e-6; const db inf = 1e9; struct Simplex { int n, m; db f[maxn][maxm]; void init(int _n, int _m) { n = _n; m = _m; } void pivot(int r, int c) { // 将第 r 个基变量换进,把第 c 个非基变量换出 db k = -f[r][c]; f[r][c] = -1; for (int i = 0; i <= n; i++) f[r][i] /= k; for (int j = 0; j <= m; j++) { if (j == r || fabs(f[j][c]) < eps) continue; k = f[j][c]; f[j][c] = 0; for (int p = 0; p <= n; p++) f[j][p] += f[r][p] * k; } } bool simplex() { int c = -1, r = -1; for (int i = 1; i <= n; i++) { if (f[0][i] > eps && (c == -1 || f[0][i] > f[0][c])) c = i; } if (c == -1) return 1; for (int j = 1; j <= m; j++) { if (f[j][c] < -eps) { if (r == -1) r = j; else if (f[j][0] / (-f[j][c]) < f[r][0] / (-f[r][c])) r = j; } } pivot(r, c); return simplex(); } }; int n, m; Simplex S; signed main() { cin >> n >> m; S.init(m, n); for (int i = 1; i <= n; i++) cin >> S.f[i][0]; for (int i = 1; i <= m; i++) { int l, r; cin >> l >> r >> S.f[0][i]; for (int j = l; j <= r; j++) S.f[j][i] = -1; } S.simplex(); cout << (int) S.f[0][0] << endl; return 0; } ```
by TernaryTree @ 2023-12-13 20:23:23


|