摘要:
B 思路 看时间复杂度肯定是预处理o1查询,每个数字只能选择一次,可以使用01背包求解 f[i]+=f[i-a[j]*a[j],枚举i时,使用一个变量max,表示上一层枚举到的最大值,如果使用N的话其实好多f[i]并没有更新 代码: int fib[N]; int f[N]; void init() 阅读全文
摘要:
###地道战 思路: 题目可以转化为,求包含x的最长连续子段 使用线段树合并,因为线段树的左右区间是相邻的 分别维护一个左前缀和右后缀的最大长度 代码: #include <bits/stdc++.h> #define int long long int _ = 0, Case = 1; using 阅读全文
摘要:
###上帝造题的七分钟2 思路: 数据范围$10^{12}$,大概开方5六次之后就变成1,当一个区间全是1的时候就没必要改变,其他暴力修改即可 代码: #include <bits/stdc++.h> #define int long long int _ = 0, Case = 1; using 阅读全文
摘要:
D: 枚举a,二分b,更新最小值 code: void solve(int Case) { int n; int x; cin >> n; int ans = 2e18; auto check = [&](int a, int b) { int x = a * a * a + a * a * b + 阅读全文
摘要:
###[SCOI2005]骑士精神 思路: 迭代加深,启发式剪枝 代码: #include <bits/stdc++.h> #define int long long int _ = 0, Case = 1; using namespace std; #define all(v) begin(v), 阅读全文
摘要:
###[SCOI2009]最长距离 思路: 将1的格子变成边权为1,则需要求每个点所能到达的点的最短距离并且不超过t,这里采用01bfs求最短路 代码: #include <bits/stdc++.h> #define int long long int _ = 0, Case = 1; using 阅读全文