90TLE求助

P4322 [JSOI2016] 最佳团体

开氧气即过(亲测有用(
by hank0402 @ 2022-02-10 18:15:34


@[hank0402](/user/482642) 得了吧,你坐在我旁边,你让我开O2过了但是源代码TLE啊
by leoair @ 2022-02-10 18:21:50


毕竟你参考的tj也加了氧气瓶啊(
by hank0402 @ 2022-02-10 18:23:01


@[leoair](/user/124527) ```cpp #include<bits/stdc++.h> #define N 2501 using namespace std; int m, n, cnt, s[N], head[N]; double res[N], f[N][N]; struct xcj{ double cost, fight; } a[N]; struct xcx{ int to, nxt; } e[N]; inline int read(){ int s = 0, w = 1; char ch = getchar(); for (; ch < '0' || ch > '9'; w *= ch == '-' ? -1 : 1, ch = getchar()); for (; ch >= '0' && ch <= '9'; s = s * 10 + ch - '0', ch = getchar()); return s * w; } void add(int x, int y){e[++cnt] = {y, head[x]}, head[x] = cnt;} void dp(int x, int fa){ s[x] = 1, f[x][1] = res[x]; for (register int i = head[x]; i; i = e[i].nxt){ int y = e[i].to; if (y != fa){ dp(y, x), s[x] += s[y]; for (register int j = min(m, s[x]); j > 0; --j) for (register int k = 0; k <= min(j - 1, s[y]); ++k) f[x][j] = max(f[x][j], f[x][j - k] + f[y][k]); } } } bool chck(double mid){ res[0] = 0; for (register int i = 1; i <= n; i+=2){ res[i] = a[i].fight - mid * a[i].cost; res[i+1] = a[i+1].fight - mid * a[i+1].cost; } for (register int i = 0; i <= n; ++i) for (register int j = 1; j <= m; j+=2){ f[i][j] = -1e9; f[i][j+1] = -1e9; } dp(0, -1); return f[0][m] >= 0; } int main(){ m = read() + 1, n = read(); for (register int i = 1; i <= n; i+=2){ a[i].cost = read(), a[i].fight = read(), add(read(), i); a[i+1].cost = read(), a[i+1].fight = read(), add(read(), i+1); } double l = 0, r = 10000; while (l < r - 1e-4){ double mid = (l + r) / 2; if (chck(mid)) l = mid; else r = mid; } printf("%.3lf", l); } ``` 事实证明,没 O2 也能过:<https://www.luogu.com.cn/record/68992233>
by Jerrlee✅ @ 2022-02-10 18:31:39


@[Jerrlee✅](/user/367652) 谢谢谢谢 请问register是优化了常数吗
by leoair @ 2022-02-10 18:39:35


@[leoair](/user/124527) 对,在循环中开 register 可以起到加速的作用
by Jerrlee✅ @ 2022-02-10 18:41:18


@[Jerrlee✅](/user/367652) 好的谢啦 互关嘛
by leoair @ 2022-02-10 18:42:27


@[leoair](/user/124527) OK
by Jerrlee✅ @ 2022-02-10 18:43:23


|