摘要: 传送门 单调栈大水题 l[i] 表示 i 能扩展到的左边 r[i] 表示 i 能扩展到的右边 ——代码 1 #include <cstdio> 2 #include <iostream> 3 #define LL long long 4 5 const int MAXN = 2000002; 6 i 阅读全文
posted @ 2017-05-24 20:09 zht467 阅读(146) 评论(0) 推荐(0)
摘要: 传送门 有向图,找点数大于1的强连通分量个数 ——代码 1 #include <stack> 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 6 const int MAXN = 50001; 7 int n, m, 阅读全文
posted @ 2017-05-24 19:29 zht467 阅读(133) 评论(0) 推荐(0)
摘要: 传送门 首先,把A和B两个序列分别从小到大排序,变成两个有序队列。这样,从A和B中各任取一个数相加得到N2个和,可以把这些和看成形成了n个有序表/队列: A[1]+B[1] <= A[1]+B[2] <= … <= A[1]+B[N] A[2]+B[1] <= A[2]+B[2] <= … <= A 阅读全文
posted @ 2017-05-24 18:53 zht467 阅读(184) 评论(0) 推荐(0)
摘要: 传送门 以 去掉多少个 为阶段不好做。 去掉 k 个也可以变成选 n - k 个 f[i][j] 表示前 i 个数中 选 j 个的最优解,a[i] 必选 f[i][j] = min(f[i][j], f[k][j - 1] + abs(b[k] - b[i])) (2 <= j <= min(i, 阅读全文
posted @ 2017-05-24 16:13 zht467 阅读(122) 评论(0) 推荐(0)
摘要: 传送门 幼儿园DP。 ——代码 1 #include <cstdio> 2 #include <iostream> 3 4 const int MAXN = 2001; 5 int n, m, ans = ~(1 << 31); 6 int a[MAXN][MAXN], f[MAXN][MAXN]; 阅读全文
posted @ 2017-05-24 15:18 zht467 阅读(99) 评论(0) 推荐(0)
摘要: 传送门 和奶牛那个题很像,每一行状态互不影响,也就是求 n 遍DP 不过高精度非常恶心,第一次写,调了我一上午。 ——代码 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 5 struct Big_int 6 { 7 阅读全文
posted @ 2017-05-24 11:35 zht467 阅读(138) 评论(0) 推荐(0)
摘要: 传送门 f[i][j][k] 表示 左右两段取到 i .... j 时,取 k 次的最优解 可以优化 k 其实等于 n - j + i 则 f[i][j] = max(f[i + 1][j] + a[i] * (n - j + i), f[i][j - 1] + a[j] * (n - j + i) 阅读全文
posted @ 2017-05-24 08:14 zht467 阅读(135) 评论(0) 推荐(0)