Tricks
文章平均质量分 67
Masamiiiii
这个作者很懒,什么都没留下…
展开
-
随机化算法
随机化算法随机化算法是这样一种算法,在算法中使用了随机函数,且随机函数的返回值直接或者间接的影响了算法的执行流程或执行结果。随机化算法基于随机方法,依赖于概率大小。POJ 3318 Matrix Multiplication题意:给出三个n*n矩阵A,B,C,n矩阵乘法直接做O(N^3) TLE若AB=C 必有矩阵H使得 HAB=HC 令H为1*N的行向量,则复杂度原创 2017-04-30 13:51:54 · 676 阅读 · 2 评论 -
Codeforces 505C Mr. Kitayuta, the Treasure Hunter DP+技巧优化
点击打开链接题意:数轴上点[0, 30000]。先从 0 跳到 d=1,跳到某个点上可以得到相应的value,求可以得到最大的value。明显DP阿,设dp[i][j] 当前在i,上一次跳跃距离为j,dp[i][j]=max(dp[i+j][j],dp[i+j+1][j+1],dp[i+j-1][j-1])+val[i];i,j考虑最坏的情况 起点为0,任意给d d每次+1 最大可原创 2017-04-19 15:59:02 · 478 阅读 · 0 评论 -
Codeforces 560E Gerald and Giant Chess 组合数学+DP
点击打开链接Change the object to DP题意:h*w地图 有n个block,每次可以向下或向右,问从左上角(1,1)到右下角(h,w)的方法数? h,w经典的DP,但是数据范围h,w先把block按照x递增then y排序,方便操作令终点(h,w)为Ak,设Di为不经过block:A0,A2...Ai-1 到达Ai的方法数,则答案就为Dk 若不存在原创 2017-04-20 13:00:51 · 446 阅读 · 0 评论 -
HDU 3507 Print Article DP(斜率优化入门)
点击打开链接参考链接题意:n个数有代价ci ns[i]为i的前缀和,设d[i] 写出前i个数的最小代价 d[i]=min(d[j]+(sum[i]-sum[j])^2+M) j=1~i j+1~i为最后一段长度n结论1:考虑决策j,k 若决策j优于决策k d[j]+(sum[i]-sum[j])^2+M化解得 (d[j]+sum[j]^2)-(d[k]+原创 2017-04-21 15:43:03 · 378 阅读 · 0 评论 -
Hihocoder 147周 小HI的烦恼 bitset(技巧)
点击打开链接题意:n暴力O(5*n^2) TLE设 id[i][j] 第j门课排名为i的学生编号,s[j][i] 第j门课 排名为1..i的是那些人第i人的答案为 第k门排名高于他的人的集合相交(k=1~5),则ans=s[k][a[i][k]-1]相交后集合中1的个数#include using namespace std;const int N=3e4+10;in原创 2017-04-25 19:14:55 · 393 阅读 · 0 评论 -
ARC 060E 高橋君とホテル 倍增+二分
题意:一条直线上有n个点x[i],x[i+1]-x[i]Q次询问,问从a[j]点跳到b[j]点的最少操作次数?n对每个询问:初始为i 令l=i+1,r=b[j] 二分最远能到达的点 最坏情况下O(QNlogN) TLE..其实每次操作就是把a[i]变到最右边一个满足,r[a[i]]-a[i]每次查询就是求最少的r...r(r(a[i]))>=b[i]设r[k][原创 2017-07-11 15:41:59 · 440 阅读 · 0 评论 -
ARC 078F Mole and Abandoned Mine 状压DP
题意:n点m条边的无向图,删除第i条边花费c[i],问1到n只有一条路径时所需要的最小花费?n设dp[S][x] 定点1(只经过集合S中的点)只有一条路径到达x时最多能保留价值的边转移dp[S][x]时 要保证1->x路径上所有的边都是Bridge 保留c[x][u] 若其余u->S的边存在,则1->u构成多条路径 集合Y(包含x),则不能存在和S-{x}相连的边原创 2017-07-16 11:43:22 · 806 阅读 · 0 评论 -
Codeforces 679C Bear and Square Grid 暴力(滑动窗口)
题意:n*n地图,'X'为障碍,'.'可以到达四周相邻的'.'现在给你一次机会:选择某个k*k子矩形将里面'X'变为'.'n,k暴力枚举变化子矩形的左上角,判断和该子矩形连通有哪些联通分量.只要检查子矩形的4个边界即可.O(n^2*k)k*k中可能有和外部相连的联通分量,先加上k*k,然后在内部减小这些连通分量大小,防止重复计算.滑动窗口处理即可.#include u原创 2017-08-18 10:57:11 · 891 阅读 · 0 评论 -
Codeforces 689E Mike and Geometry Problem 思维
题意:n条线段[li,ri],f[l,r]为线段[l,r]的长度,问任意k条线段交集长度的累加和?n,k若点p被m条线段覆盖,则对答案贡献C(m,k),点的数量很多,转为计算f[i]:正好被i条线段覆盖的点有多少个?答案为:f[i]*C(i,k)(i=k..n),端点最多2n个,利用前缀差分.一段一段算即可(同一段中的点被覆盖次数相同)#include using namespa原创 2017-08-05 10:15:35 · 388 阅读 · 0 评论