常用优化思路
leoxry
天道酬勤,拼搏一个最好的自己送给未来的自己,每天开开心心敲代码就是一种幸福,不计得失,回归刚开始学习时内心的单纯
展开
-
【离散化】【转载】
如果说今年这时候OIBH问得最多的问题是二分图,那么去年这时候问得最多的算是离散化了。对于“什么是离散化”,搜索帖子你会发现有各种说法,比如“排序后处理”、“对坐标的近似处理”等等。哪个是对的呢?哪个都对。关键在于,这需要一些例子和不少的讲解才能完全解释清楚。 离散化是程序设计中一个非常常用的技巧,它可以有效的降低时间复杂度。其基本思想就是在众多可能的情况中“只考虑我需要用的值”。下面我将用转载 2017-08-16 10:09:31 · 631 阅读 · 0 评论 -
【线段问题创新思路】Hacker, pack your bags! CodeForces - 822C
Think: 1知识点:线段问题 2题意:n条线段,从其中选择2条线段长度(线段长度计算公式为r-l+1)之和为x的边权为最小的,若没有2条线段长度之和为x的,输出-1 3思路: 2 ≤ n, x ≤ 2e5,双重for循环暴力会超时,因此思考如何优化,借鉴前辈的思路,把所有的边正反记录两次,用sum[t]数组记录之前的可以作为前置匹配区间的区间长度为t的区间的最小权值 4提示(注意typ原创 2017-08-21 21:40:43 · 477 阅读 · 0 评论 -
【分治递归法】顺序表应用7:最大子段和之分治递归法
Think: 1知识点:分治递归法求最大子段和顺序表应用7:最大子段和之分治递归法——SDUT题目链接 Time Limit: 10MS Memory Limit: 400KBProblem Description 给定n(1<=n<=50000)个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的原创 2017-09-20 20:18:52 · 815 阅读 · 0 评论 -
【暴力预处理+剪枝/bitset】Golf Bot UVALive - 6886
Think: 1知识点:暴力预处理+剪枝/bitset 2题意:输入n个数,查询m次,每次查询输入一个元素,判断这个元素是否可以由最初输入的n个数通过两个数相加或单独一个数得到,两个数相加时可选择同一元素进行相加vjudge题目链接以下为Accepted代码——暴力预处理+剪枝-9363ms#include <cstdio>#include <cstring>#include <algori原创 2017-08-11 20:42:39 · 406 阅读 · 0 评论 -
【dp】Making the Grade POJ - 3666
Think: 1知识点:dp+sort()快速排序 2状态转移方程dp[i][j]:i个数以b[j]作为第i个数的当前状态最优解;dp[i][j] = abs(a[i]-b[j]) + min(dp[i-1][k]) 1<=k<=n;以下为Accepted代码#include <cstdio>#include <cstring>#include <algorithm>#include <原创 2017-08-11 09:14:12 · 416 阅读 · 0 评论 -
【map/桶记录/基础dp】Ignatius and the Princess IV HDU - 1029
Think: 1知识点:map/桶记录/基础dp 2题意:输入n个数,输出出现次数大于等于(n+1)/2的那个数vjudge题目链接以下为Accepted代码——map-421ms#include <cstdio>#include <cstring>#include <algorithm>#include <map>using namespace std;int main(){ i原创 2017-08-07 10:08:56 · 375 阅读 · 0 评论 -
【单调栈思路】Minimal Subarray Length UVALive - 6609
Think: 1知识点:单调栈思路 2题目分析&&反思:比赛时自己用模拟用队列来维护对于当前结点的前面累加和符合大于等于k的最短长度,但是一直Wrong Answer,晚上稍微平息了一点心态,搜了搜题解,发现也是一种维护单调递增序列的思想,和自己比赛时和队友讨论的思路基本一致,之后改了改自己比赛时候写的代码,还是Wrong Answer,内心有点累崩的感觉,希望自己能够知耻后勇,今天比赛队伍基本原创 2017-07-31 21:00:52 · 739 阅读 · 0 评论