自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 (递归思路优化)关于P5019 [NOIP2018 提高组] 铺设道路

递归超时的优化

2023-03-22 21:45:15 116 2

原创 P1129 矩阵游戏

这个题乍一看题目,没有思路啊!然后对角线都为1,我下意识认为这题是看这个矩阵是否可逆(能否通过矩阵变换成单位矩阵),但是我只学过代码怎么求逆没学过判断是否可逆,然后我就卡了。。。然后我分析了题,看了知识点是二分图,我就往图方面靠。虽然我们不知道怎么判断可逆,但是如果一个矩阵可逆,那么他对角线一定有数,你没数咋可能变为单位矩阵捏。所以我们只需要判断对角线有没有n个元素就行了。我们就可以进行二分图匹配啦,以行与列作为两个集合。(如果是同一行不同列的,就相当于一夫多妻,他的匹配数只有一个),如果匹配了就加一,数量

2022-04-28 23:32:55 1573 2

原创 P3275 糖果(差分约束)

其实最开始我打草稿画图的时候觉得这是拓扑排序,但是我太菜了建不来图然后只能去套差分约束。什么是差分约束呢,形如xi-xj<=m的式子我们可以联想到最短路的式子:dis[v]<=dis[u]+w。如何求出xi的解,我们最短路跑一遍就行了。值得一提的是,我们可以把xi-xj<=m变形成xj-xi>=-m,这样是不是就像最长路的式子了?那最短路的解和最长路的解有什么区别呢,最短路求得最大值,最长路求得最小值。我们既然知道做法了,那之后是不是求最短/长路了?为了避免有点没在图

2022-04-27 15:10:40 155

原创 洛谷P1879(状态压缩DP

**第一天学习状态压缩,代码写的很通俗易懂**先做的**互不侵犯**再来做的这个题,这个题我认为我们学长觉得他比互不侵犯难的原因是:**如何把草地的情况和放羊的情况结合起来。(这个点我也卡了半个小时)**我们先想这个题,因为状态很多所以考虑状态压缩,我们先预处理每一个状态,把他进每一个数组我们可以看到草地的情况都是01,那么我就想到了二进制表达草地贫瘠情况,```c for (int i=1; i<=m;i++) for (int j=1;j<=n;...

2022-03-28 22:19:51 173

原创 激光炸弹(动态规划+二维前缀和

把每个点作为最大正方形的右下角的点,然后再枚举从i=r到i=nx的,j=r到j=ny点(因为炸弹范围本身就是r个边长)。值得注意的是,本题的边长是变相告诉你的,通过给你的点,更新最大的边长(我就说这里卡了半个小时),最后最后,把点当成格子做,这样就不会存在特判边界不能炸的情况详情见ac代码#include <iostream>#include <cstdio>#include <cstring> using namespace std;int dp[10

2022-03-07 17:06:14 462

原创 P1387最大正方形动态规划(类似二维前缀和的动态规划

我们以一个点为正方形的右下角,如果他是1的话,那么以它为最大正方形的边等于if(map[i][j]==1) { dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1; ans=max(ans,dp[i][j]); }所以以这个建立方程啦附ac代码#include <iostream>#include <cstdio>#include <cstring> using na

2022-03-07 16:50:36 66

原创 自动刷题机(二分

取最大值以及最小值就看你的等号在哪个地方取最大值的话,如果此时已经相等那么就往右边,取最小值得话相等就往左边,其它得就是稍微变形了一下#include <iostream>#include <cstdio>#include <cstring> long long n,k,x[999910];using namespace std;long long check(long long mid){ long long cnt=0; long long

2022-03-07 13:11:45 140

原创 洛谷P1083借教室(差分加二分

一般的暴力做法肯定就是枚举订单,看满足这个订单及之前订单的情况下会不会有教室借不了(为什么不考虑后面的教室呢?因为问的就是第一个不满足的订单,我刚开始就是没读懂题意)然后标准二分模型枚举订单。然后是差分,再求差分的前缀和得到每个教室的占用情况,再来跟原来的情况对比,进行二分判断具体见代码#include<bits/stdc++.h>#define ll long longusing namespace std; int l,ri,mid; int n,m;int f

2022-03-07 13:06:11 148

原创 洛谷P1902刺杀大使(二分+深搜

某组织正在策划一起对某大使的刺杀行动。他们来到了使馆,准备完成此次刺杀,要进入使馆首先必须通过使馆前的防御迷阵。迷阵由n\times mn×m个相同的小房间组成,每个房间与相邻四个房间之间有门可通行。在第nn行的mm个房间里有mm个机关,这些机关必须全部打开才可以进入大使馆。而第11行的mm个房间有mm扇向外打开的门,是迷阵的入口。除了第11行和第nn行的房间外,每个房间都被使馆的安保人员安装了激光杀伤装置,将会对进入房间的人造成一定的伤害。第ii行第jj列 ...

2022-03-07 12:21:22 303

原创 洛谷P4994终于结束的起点(记忆化搜索

保存fib(n)就行,用的时候调用出来#include<bits/stdc++.h>#define ll long longusing namespace std;int cnt=0;int a[10010];int m;int f[9999999];int s(ll k){ if(f[k]!=0) { return f[k]; } else { if(k==1||k==2)f[k]=1%m; else { int x=s(k-1);

2022-03-07 11:50:48 63

原创 洛谷P1025 数的划分(DFS+剪枝)

题目描述将整数nn分成kk份,且每份不能为空,任意两个方案不相同(不考虑顺序)。例如:n=7n=7,k=3k=3,下面三种分法被认为是相同的。1,1,51,1,5;1,5,11,5,1;5,1,15,1,1.问有多少种不同的分法。输入格式n,kn,k(6<n \le 2006<n≤200,2 \le k \le 62≤k≤6)输出格式11个整数,即不同的分法。输入输出样例输入 #1复制7 3输出 #1复制4说明/提示...

2022-03-07 10:48:44 277

原创 洛谷P5587打字练习(String的运用

定义一个string s,然后while(getline(cin,s),s!"EOF"),在定义另一个string store, 然后遍历 s ,如果等于<就清空头部(类似栈)(当然要判断他是不是空的),不是的话就压进去。然后一行一行一一对比(一一对比很奇妙,可以看一下代码#include<bits/stdc++.h>using namespace std;const int N=100010;string s[N],t[N],s1;long long n,m,cnt;in

2022-03-07 10:19:00 286

原创 跳石头(二分答案+贪心

看见最小的最大或者最大的最小,考虑二分答案。以跳跃进行枚举,比它小的就丢掉,看最后丢掉的数量跟题目要求是怎样,多了距离就变小,少了就变大#include<bits/stdc++.h>using namespace std; int main() { int l,n,m,left,right,now,i,a[50010],s,ans; scanf("%d%d%d",&l,&n,&m); for(i=1;i<=n;i++) { sca

2022-02-27 16:25:22 190

原创 妖梦拼木棒

这个涉及到组合数的问题,因为要选四个木棒成为等边三角形,那么肯定有两条边是相等的,另外一条边由两条木棒拼接而成等于另外两条木棒。所以我们枚举每一个长度,如果它数量大于2那么就可以选取两条这个边长度的木棒作为等边三角形的两条边,有种可能,然后枚举接下来的一条边,如果两条边相等那么还是#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int num[100100];

2022-02-27 16:21:40 259

原创 全排列问题

与此题很像​​​​​​https://blog.csdn.net/nnnnzhlll/article/details/123165403最主要的还是一个check函数看它有没有被选择过#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int vis[10010];int n; int a[10010];int check[10010];void dfs

2022-02-27 15:57:56 47

原创 组合的输出

本题每一行需要输出三个数字,那么我们可以建立一个数组进行储存这个三个数字。当然这个是用递归实现的。因为本题按照顺序排列,所以我们存储数据时可以按照一个for循环来存储,而 for(i=a[k-1]+1;i<=n;i++) { a[k]=i; dfs(k+1); }k是指现在是第几位数字那么当k>3的时候就可以输出啦。#include<cstdio>#include<iostream>#include<algorithm>u

2022-02-27 15:52:38 105

原创 洛谷p1803线段覆盖(贪心问题)

想要上更多的课,不妨以贪心的视角来做。首先先确定一个时间点为0,如果有一门课的开始时间刚好在时间点的后面那么就选择这门课,并把这门课的结束时间作为下一个时间点。也就是说选择最靠近当前时间点的一门课。但是存在这么一种情况就是结束时间有的靠后有的靠前。因为我们要尽可能选更多的课,所以我们选择的课的结束时间尽量要越早越好。这时候就要用排序按照结束时间由小到大排序,具体看代码。#include<iostream>#include<cstdio>#include<algorit

2022-02-27 15:47:01 125

原创 地毯填补问题(分治+递归)

先从一个正方形网格开始,如果仅凭1234这些图形是不可能把网格铺满(自己可以去试一试),最少有一个空格,所以为什么题目会说除了公主的位置其它都铺满。好,画一个白色正方形网格,如果我们确定了公主的大抵方位,比如:左上,那么我们就将网格中心点周围四个网格除了左上的全部涂满颜色,那么就相当于我们制造了三个公主进而右上,右下,左下的网格也能被铺满了。然后就一直递归公主的网格和涂满颜色的网格,根据格子的位置确定他的部分左上角的位置。比如我是右下的网格,那么右下网格的左上角就是a+l/2,b+l/2,依次递归,剩下的看

2022-02-27 13:32:25 224

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除