
前缀和优化
Mys_C_K
人生有许多道:曾经踏足的是道,即将踏往的也是道,那什么才是道呢?唯有脚下走的才是道。一切精神或者物质都归于虚无,然后从混沌中衍生出三万道。在悲喜间涉足一条无数前人经历过,且将有无数后人奔赴的道,无论是否已经或者将要到达彼岸,然后便不再回头或是左顾右盼,即使有些道繁盛至极,夜灯如昼,无数人一浪又一浪的涌去,造就了世人皆知的辉煌;即使有些道草木凋敝,荒草丛生,只等勇敢的开拓者斩开荆棘,创造一片天地;这些都无所关,无所在意,彼岸何如、来日何方甚至过往旧事都化作一缕云烟,飘渺碧霄,我自撷高山之月色,独随足落处往行。
展开
-
[AHOI2009] BZOJ2431 逆序对数列-动态规划-前缀和优化
传送门题目大意:求逆序对数为k的长为n的排列有多少?n,k题解:这显然是个DP(废话)而且dp[n][k]表示长为n逆序对数为k的方案数。而且状态转移显然要从dp[n-1][...]推过来。考虑如果把n插入到1~(n-1)的某个逆序对数为x的排列的第p个数的后面,那么会新产生(n-1)-(p+1)+1=n-p-1对新的逆序对,其中0因此如果当前状态dp[n][k],那么原创 2017-05-19 19:40:48 · 751 阅读 · 0 评论 -
ARC 071 F Infinite Sequence - dp - 前缀和
题目大意:有多少个无限长的由{1,2,⋯,n}组成的序列a1,a2,…满足以下条件?第n个及以后的元素是相同的,即若i,j≥n,ai=aj。对于每个元素i,紧随第i个元素后的ai个元素是相同的,即若i<j<k≤i+ai,aj=ak。题解:显然如果某个数字a[i]=x>1,要么i+1到i+x全是1,要么从a[i+1]=y开始到结束全都是y。(换言之一个合法序列只要有两个相邻...原创 2018-10-24 16:37:39 · 301 阅读 · 0 评论 -
atcoder tenka1 2018 e Equilateral - 前缀和
题目大意:给一张黑白网格图,问有多少黑点的无序三元组,两两曼哈顿距离相等。300。题解:转切比雪夫距离,发现一定有至少两个点的连向平行于坐标轴。枚举计算即可,注意等腰直角三角形的情况若不处理会被计两次。#include<bits/stdc++.h>#define gc getchar()#define rep(i,a,b) for(int i=a;i<=b;i++)#...原创 2018-10-28 16:25:02 · 318 阅读 · 0 评论 -
Nuske vs Phantom Thnook - 前缀和
给你个01格子,黑格子是森林,很多次询问一个矩形里黑格子连通块数量。 n,m<=2000,q<=200000。 题解:因为是森林所以答案等于点数减去边数。前缀和一下即可。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define...原创 2018-09-14 16:52:42 · 197 阅读 · 0 评论 -
AGC 027 B Garbage Collector - 贪心
神仙题啊题解:显然每一趟是倒着往前捡。首先把所有垃圾分开考虑:如果位置在xxx的垃圾是第iii次被捡起来的,则对答案有max(5,2i+1)\max(5,2i+1)max(5,2i+1)的贡献。原因考虑每次在已经捡起i−1i-1i−1个垃圾的情况下,捡起这个垃圾的增量。如果i=1i=1i=1,则一开始走到那里花费是xxx,回去的代价是(1+1)2x=4x(1+1)^2x=4x(1+1)2x...原创 2018-09-19 11:53:06 · 286 阅读 · 0 评论 -
ARC 067 F Yakiniku Restaurants - 单调栈 - 前缀和
题目大意:(我翻译的开森) n个餐馆排成一条直线,相邻两个餐馆有个距离;m张餐票,每张最多能用一次,并且在不同的店使用收益不同。起点终点任意,问总收益减去总路程最大是多少。 n≤5000,m≤200n≤5000,m≤200n\le5000,m\le200 题解:区间确定的时候每张餐票会用在最划算的那个餐馆,反过来对每个餐票和每个餐厅考虑选择哪些区间会使得这张餐票用在这家餐馆。显然是左右遇到更...原创 2018-09-11 16:03:12 · 489 阅读 · 0 评论 -
vijos 1421 更换轮胎 - 前缀和优化dp
传送门题解:和上一个题一样强迫症晚期必须做到O(n)空间代码://vijos 1421#include#include#include#include#include#define INF (LLONG_MAX/2)#define N 1010#define lint long longusing namespace std;lint dp[2][N],pre[原创 2017-08-04 21:32:53 · 687 阅读 · 0 评论 -
vijos 1283 佳佳的魔杖 - 前缀和优化dp
传送门题解:不知道他们怎么看出是LCS的。首先考虑转化成图,选了[l,r]就不能选择[s,t],l所以可以用网络流做最小割,也可以在这张无环图上做dp,但是边数是O(n^4)的。发现如果左端点相同至多只会选择一根。考虑dp,记dp[l][r]表示选了[l,r]选了左端点最靠左的区间为[l,r](当然有可能不合法,此时记为0)这样dp[l][r]是从dp[s][t]转移而原创 2017-08-04 21:11:00 · 589 阅读 · 0 评论 -
BZOJ3398 牡牛和牝牛 - 动态规划
传送门题解:沙茶题。前缀和维护一下。这题显然可以再O(k+lgn)的时间内出解。代码:#include#include#include#define mod 5000011#define N 100010using namespace std;int dp[N],s[N];int main(){ int n,k;scanf("%d%d",&n,&k);原创 2017-08-02 20:49:06 · 750 阅读 · 0 评论 -
魔力 - 随机 - 前缀和
题目大意:给定一列数和一个字符集,问有多少子区间每种数字都出现了并且出现的次数都相等。题解:考虑字符集2怎么做,分别看为1和-1然后区间和等于0即可。考虑给每个数值赋一个随机权值,并所有种类的数的随即权值和为0,然后统计区间和为0的区间数即可。使用unordered_map可以线性。#include<bits/stdc++.h>#define rep(i,a,b) for(int...原创 2018-12-20 20:29:13 · 270 阅读 · 0 评论