洛谷
Sqwlly
有自己热爱的东西,真好。
展开
-
洛谷P1563 玩具谜题(模拟)
P1563 玩具谜题题解:nnn个玩具围成一个圈,但是方向有的朝内有的朝外,因此每个玩具的左右手方向取决于它是朝内还是朝外。如果玩具朝内,并且是往左方向数,那么根据图来看就是序号减小的方向;如果朝外,并且往左方向数,就是序号增大的方向。拿数字表达就是(0 & 0 || 1 & 1) 对应序号减小方向,否则就是增大方向,那么显然我们可以想到利用异或的性质。代码#include&...原创 2018-09-17 21:56:58 · 256 阅读 · 0 评论 -
洛谷P4147 玉蟾宫(悬线法dp)
P4147 玉蟾宫题解:悬线dpdpdp,先预处理出悬线的左右边界。hhh数组记录能到的最高高度。然后max(h(i,j)∗(Right(i,j)−Left(i,j)+1)max(h(i,j)∗(Right(i,j)−Left(i,j)+1)max(h(i,j)∗(Right(i,j)−Left(i,j)+1)即可。代码#include<bits/stdc++.h>const ...原创 2018-10-23 22:25:48 · 277 阅读 · 1 评论 -
洛谷P1541 乌龟棋(dp)
P1541 乌龟棋题解:dp[i][j][k][l]dp[i][j][k][l]dp[i][j][k][l]表示爬行牌111出牌数量为iii,爬行牌222出牌数量为jjj,爬行牌333出牌数量为kkk,爬行牌444出牌数量为lll时所能获得的最大分数。仔细一看是和多重背包一样的。代码#include<bits/stdc++.h>using namespace std;int...原创 2018-10-24 19:33:31 · 240 阅读 · 0 评论 -
洛谷P1095 守望者的逃离(dp)
P1095 守望者的逃离题解:每次有三种决策:闪现,跑步,停下休息。由于闪现和跑步不太好同时处理,因为有魔法消耗所以一开始贪心的尽可能多使用闪现,魔法不够就停下休息恢复。最后再考虑何时跑步。代码#include<bits/stdc++.h>using namespace std;int dp[300010];int main(){#ifndef ONLINE_JUDG...原创 2018-10-24 19:54:25 · 215 阅读 · 0 评论 -
洛谷P1719 最大加权矩形
P1719 最大加权矩形题解:最大子段和的升级版,最大子矩阵和吧。考虑将每一列压缩一下,然后枚举行的组合即可。代码#include<bits/stdc++.h>using namespace std;int a[101][101], dp[101], t[101], n;int solve(){ int ans = -1e9; for(int i = 1; i &...原创 2018-11-09 13:55:09 · 302 阅读 · 0 评论 -
洛谷P1080 国王游戏(贪心)
P1080 国王游戏题解:首先考虑相邻的两个大臣该如何排列。如果iii排在jjj前面需要满足ai⋅prebj&lt;aj⋅prebi\frac{a_i \cdot pre}{b_j} &lt;\frac{a_j \cdot pre}{b_i}bjai⋅pre<biaj⋅pre,显然ai⋅bi&lt;aj⋅bja_i \cdot b_i &lt; ...原创 2018-11-07 17:04:38 · 357 阅读 · 0 评论 -
洛谷P1369 矩形(二维前缀和+枚举)
P1369 矩形题解:做一个二维点数前缀和,然后枚举左上角和右下角即可。用枚举的一个矩形减去内部的最大矩形就是边上的点数。#include<bits/stdc++.h>using namespace std;int G[303][303];int love(int a,int b,int c,int d) //(a,b)为左上角,(c,d)为右下角{ if(a ...原创 2018-11-11 20:54:00 · 409 阅读 · 1 评论 -
洛谷P2102 地砖铺设(贪心)
P2102 地砖铺设题解:真的是训练程度太不饱和。参考了大佬的题解。我一开始也是想着不论n&gt;mn&gt;mn>m还是n&lt;mn &lt;mn<m,都可以用BCBC...BCBC...BCBC...给分隔开,然后继续放AAA。实际上是错的。。。正解应该是贪心扩展,直到不满足为止(点被占用或者达到边界或者无法涂色)。#include<b...原创 2018-11-11 21:20:13 · 524 阅读 · 0 评论 -
洛谷P1002 过河卒(简单递推dp)
P1002 过河卒题解:先把马阻挡的地方给标记上,然后递推即可。dp[i][j]dp[i][j]dp[i][j]代表卒走到(i,j)(i,j)(i,j)所可行的路线数。#include<bits/stdc++.h>typedef long long LL;using namespace std;const int dir[2][9]={{0,-2,-1,1,2,2,1,-1,...原创 2018-11-11 21:35:23 · 354 阅读 · 0 评论 -
洛谷P1734 最大约数和(dp)
P1734 最大约数和题解:考虑和为sss的时候最大因数和。则有dp[s]=max(dp[s−j]+sum[j],dp[s])dp[s] = max(dp[s - j] + sum[j],dp[s])dp[s]=max(dp[s−j]+sum[j],dp[s]),写完才发现就是个背包。。。(预处理一下因数和)注意111的因数不包括它本身就没有了,所以dp[1]=0dp[1] = 0dp[1]=0...原创 2018-11-11 21:45:39 · 579 阅读 · 3 评论 -
洛谷P1115 最大子段和
最大子段和题解:考虑以jjj为结尾的最大子段和。所以有dp[j]=max(a[j],dp[j−1]+a[j])dp[j] = max(a[j],dp[j - 1] + a[j])dp[j]=max(a[j],dp[j−1]+a[j])。最后遍历一遍即可。但是实际上发现可以用两个变量代替。代码#include<bits/stdc++.h>using namespace std;...原创 2018-11-11 21:53:37 · 261 阅读 · 0 评论 -
洛谷P1091 合唱队形(dp)
P1091 合唱队形题解:很容易想到最长单升子序列了,但是由于还要下降,所以再做一次最长单降子序列。最后枚举iii即可。代码#include&amp;lt;bits/stdc++.h&amp;gt;using namespace std;int a[111], dp[111][2];int main(){#ifndef ONLINE_JUDGE freopen(&quot;input.in&quot;,&原创 2018-11-11 22:09:55 · 318 阅读 · 0 评论 -
洛谷P1057 传球游戏(dp)
P1057 传球游戏题解:dp[i][j]=dp[i+1][j−1]+dp[i−1][j−1]dp[i][j] = dp[i + 1][j - 1] + dp[i - 1][j - 1]dp[i][j]=dp[i+1][j−1]+dp[i−1][j−1]表示球传到第iii个人传球次数为jjj的时候的方案数。边界为dp[1][0]=1dp[1][0] = 1dp[1][0]=1。(这个不用多说叭…...原创 2018-11-12 00:14:04 · 233 阅读 · 0 评论 -
洛谷P1216 [USACO1.5]数字三角形 Number Triangles(DP)
P1216 [USACO1.5]数字三角形 Number Triangles题解:太水了…详情请看博主另一篇题解POJ1163(同一道题)#include<bits/stdc++.h>using namespace std;int a[1024][1024],dp[1024][1024];int main(){#ifndef ONLINE_JUDGE freop...原创 2018-11-12 00:53:23 · 224 阅读 · 0 评论 -
洛谷P1435 回文字串(dp)
P1435 回文字串题解:dp[i][j]dp[i][j]dp[i][j]表示前iii个字符与后jjj个字符构成回文串需要插入的最少字符数。则有{dp[i][j]=dp[i−1][j−1],s[i]==s[n−j+1]dp[i][j]=min(dp[i−1][j],dp[i][j−1])+1,s[i]̸=s[n−j+1]\begin{cases}dp[i][j] = dp[i-1][j-1],...原创 2018-11-19 23:33:28 · 203 阅读 · 0 评论 -
洛谷P1083 借教室(二分+差分)
借教室题解:看到多次区间操作,立刻想到差分,然后二分查询订单即可。时间复杂度O(nlog(n))O(nlog(n))O(nlog(n))。代码#include<bits/stdc++.h>using namespace std;const int N = 1e6+10;int n,m,num[N],ret[N];struct node{ int v,l,r;}a[...原创 2018-10-22 00:23:13 · 197 阅读 · 0 评论 -
洛谷P1577 切绳子(二分枚举)
P1577 切绳子题解:因为精度问题,所以我们将其转换成整数,然后二分枚举KKK条绳子的最长长度。只要注意当枚举长度为000的时候break掉就可以了。代码#include&lt;bits/stdc++.h&gt;using namespace std;int n,k;double a[10010];bool ok(int len){ int ret = 0; ...原创 2018-09-30 17:09:57 · 726 阅读 · 0 评论 -
洛谷P3951 小凯的疑惑(找规律|扩展欧里几得)
P3951 小凯的疑惑题解:扩展殴里几得的做法请点我蒻的做法。。。首先,根据数据范围可以肯定是有规律的题。(遇事先暴力打个表,既增加对题目的理解,有时还能直接ac,比如近日的南京网赛A)发现3⋅7−(3+7)=113\cdot7 - (3+7) = 113⋅7−(3+7)=11,然后又测了几组数据发现同样满足a∗b−(a+b)a*b-(a+b)a∗b−(a+b),然后就莽夫般的交了,意外的...原创 2018-09-17 22:17:04 · 452 阅读 · 0 评论 -
洛谷P2822 组合数问题(组合数打表预处理+二维前缀和)
P2822 组合数问题题解Θ(N2)\Theta(N^2)Θ(N2)预处理打出范围在200020002000以内的组合数,做个二维前缀和Θ(1)\Theta(1)Θ(1)查询。#include&lt;bits/stdc++.h&gt;typedef long long LL;using namespace std;//组合数打表模板,适用于N&lt;=3000//c[i][j]表示...原创 2018-09-18 22:31:07 · 233 阅读 · 0 评论 -
洛谷P3958 奶酪(bfs)
P3958 奶酪题解先对球按照高度(即zzz坐标)排个序,对于每个球,我们对与它相交或者相切的球建边,然后从最下面的球开始bfsbfsbfs就好了。(坑点:有可能与下表面相交或相切的不止一个,还有距离要用double…)代码#include<bits/stdc++.h>using namespace std;struct ball{ int x,y,z; bool...原创 2018-09-18 22:47:30 · 362 阅读 · 0 评论 -
洛谷P2827 蚯蚓(隐藏的单调的队列)
P2827 蚯蚓题解(不行,我先吐槽一下,因为少了两个等号我调了一个晚上!!!可恶啊(〃>皿<),35分到100分的差距!)首先,我们可以先模拟一下切蚯蚓的过程,会发现,后切成蚯蚓肯定要比先切成蚯蚓短。假设现在有蚯蚓a,ba,ba,b并且La&amp;gt;LbL_a&amp;gt;L_bLa&gt;Lb,对于第iii次切割,切割蚯蚓aaa,长度为LaL_aLa,将其切割为x=p⋅La...原创 2018-09-24 01:10:51 · 268 阅读 · 0 评论 -
洛谷P3952 时间复杂度(烦人的模拟)
P3952 时间复杂度题解(此题真的是烦人。。。)我就说几个细节好了,当a&amp;gt;na &amp;gt; na&gt;n时,即此时不能进入当前循环,那么当前的循环的嵌套循环都不能增加贡献,我们可以标记一下,等其再遇到这个标记的时候再累计贡献。对于ERRERRERR的处理,我们可以肯定FFF的数量一定等于EEE的数量,所以当处理完之后如果队列不为空,则为ERRERRERR,还有就...原创 2018-09-24 01:26:28 · 442 阅读 · 0 评论 -
洛谷P2831 愤怒的小鸟(状压dp)
P2831 愤怒的小鸟题解首先看数据,基本就是状压没跑了。解法:先预处理出所有可能的抛物线,对于每一个小猪猪,我们去看最多能连上几个小猪猪。将坐标带进去求解二元一次方程。如果a&amp;amp;lt;0a&amp;amp;lt;0a&amp;lt;0,就去拓展最多能打几只小猪。其次就是状态转移方程,考虑对于打掉iii只小猪最少需要的小鸟数量。我们用集合SSS代表已经打掉的小猪,equationequatione...原创 2018-09-24 14:02:38 · 249 阅读 · 0 评论 -
洛谷P2678 跳石头(二分枚举)
P2678 跳石头题解:二分枚举答最长的最短跳跃距离。本题关键在于checkcheckcheck函数怎么写。我们可以这样想,如果当前石头与上一块石头的距离小于枚举的答案,那么说明当前石头需要被移走,依次反复,如果到达终点的时候所移走的石头不超过MMM块,那么说明当前枚举的答案可行,但是需要继续增加距离,因为可能还不是最长的,否则就减小距离。代码#include<bits/stdc++....原创 2018-10-01 09:24:41 · 648 阅读 · 0 评论 -
洛谷P1419 寻找段落(二分+单调队列)
P1419 寻找段落题解:题中需要我们去求一个最大的长度在[S,T][S,T][S,T]之间的连续子序列平均值。即x=∑i=LRaiR−L+1(S≤R−L+1≤T)x = \frac{\sum_{i=L}^R a_i}{R-L+1} (S\leq R-L+1\leq T) x=R−L+1∑i=LRai(S≤R−L+1≤T)∑i=LRai=x⋅(R−L+1)\sum_{i=L}^R a_...原创 2018-10-01 12:26:52 · 332 阅读 · 0 评论 -
洛谷P1230 智力大冲浪(贪心)
P1230 智力大冲浪题解:准着一个贪心思想,在尽可能短的时间内,做价值尽可能多的题。因此,我们可以按照价值从大到小排个序,然后对于每一道题看在时间限制内可以做哪几道题。时间复杂度Θ(N2)\Theta(N^2)Θ(N2)。#include&lt;bits/stdc++.h&gt;using namespace std;struct pig{ int v,t; boo...原创 2018-09-30 14:53:55 · 684 阅读 · 0 评论 -
洛谷P1109 学生分组(贪心)
P1109 学生分组题解:因为只需要计算移动次数,那么计算出每组人数与要求的人数差多少即可。代码#include<bits/stdc++.h>using namespace std;int n,L,R,a[52];void solve(){ int ret = 0, ter = 0; for(int i = n-1 ; i >= 0; --i){ if...原创 2018-09-30 15:05:50 · 604 阅读 · 0 评论 -
洛谷P1883 函数(三分枚举)
P1883 函数题解:容易发现F(x)F(x)F(x)是一个凹函数,因此可以利用三分来做,将区间分为三部分,[l,mid_l],[mid_l,mid_r],[mid_r,r]。[l,mid\_l],[mid\_l,mid\_r],[mid\_r,r]。[l,mid_l],[mid_l,mid_r],[mid_r,r]。当F(mid_l)&lt;F(mid_r)F(mid\_l) &am...原创 2018-09-30 15:49:42 · 515 阅读 · 0 评论 -
洛谷P1843 奶牛晒衣服(贪心)
P1843 奶牛晒衣服题解:每次用烘衣机来烘最湿的衣服,然后减去烘衣机烘干的湿度,累计自然晒干需要的天数,每次取最湿的衣服用优先队列维护即可。代码#include<bits/stdc++.h>using namespace std;const int N = 5e5+10;priority_queue<int> pq;int main(){#ifn...原创 2018-09-30 16:01:38 · 592 阅读 · 1 评论 -
洛谷P1824 进击的奶牛(二分枚举)
P1824 进击的奶牛题解:二分枚举最大的最近距离。关键在于check函数的写法,首先可以确定第一个栏可以放一个牛,然后根据枚举的距离来判断是否能放ccc头牛,如果可以就继续增大距离,否则就减小距离。代码#include<bits/stdc++.h>using namespace std;int a[100010],n,c;bool ok(int d){ int now...原创 2018-09-30 16:45:28 · 763 阅读 · 0 评论 -
洛谷P1638 逛画展(贪心)
P1638 逛画展题解:维护一个涵盖所有画师的滑动窗口,尽量让窗口内每种画的数量保持在111,记录长度最短的窗口端点。代码#include<bits/stdc++.h>using namespace std;int n,m,d[1000010],now[2001];int main(){#ifndef ONLINE_JUDGE freopen("input....原创 2018-09-30 17:00:38 · 361 阅读 · 0 评论 -
洛谷P1018 乘积最大(dp)
P1018 乘积最大题解:dp[i][j]dp[i][j]dp[i][j]表示前iii个数插入jjj个乘号时的最大乘积。那么明显有dp[i][j]=max{dp[p][j−1]⋅num[p,j]}dp[i][j] = max\{dp[p][j - 1] \cdot num[p,j]\}dp[i][j]=max{dp[p][j−1]⋅num[p,j]}。代码import java.util.S...原创 2018-11-19 23:58:09 · 357 阅读 · 0 评论