自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AcWing 176. 装满的油箱

题意:从起点到目的地,一路上有油价不同的加油站,选择最佳的加油方案,使加油钱最少。思路:就是两种可选择的方案如果说当前还没有装满油的话,那么我们可以选择加一升汽油,然后拓展到新的状态,也就是(city,fuel+1)对于每一条边而言,我们可以通过这条边到达一个城市,那么如果说当前剩余油量可以走完这条路,那么我们就拓展新状态(Next,fuel-w)这样我们不断地取出当前花费最少的状态进行拓展,然后每一次拓展用ans数组记录最小花费即可.AC代码:#include<bits/stdc+.

2020-10-13 21:57:45 181

原创 AcWing 175. 电路维修

题意:改变最少的电线方向使得左上角和右下角连接起来。思路:也是一个最小步数模型,首先把电路板上每一个格子点看作无向图中的节点,两个节点x和y是某个小方格的两个对角,那么如果说x和y的线段是“",那么我们可以认为边权为0,反之如果x和y线段是“/”,那么我们的边权视为1,说明要旋转一次才能够连上。现在得到了一张边权0或1的无向图,那么和普通广搜一样,我们唯一的改变就是,如果说当前新状态的边权为0,那么我们就放到队头先走,因为我们要满足两端性和单调性,而为了这个单调性,如果说当前新状态边权为1,那么我.

2020-10-13 20:46:34 273

原创 AcWing 170. 加成序列

题意:给定一个数字生成一个序列要使得序列中的元素满足递增且每个数都能用他前面的两个数(可以是一个数的两倍)相加得到。思路:第一个数和第二个数肯定是1和2,然后再根据层数和数要递增这些限制来进行dfs。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e6+10;int x[maxn];bool vis[maxn];int n; int dfs(int now,in.

2020-10-11 21:17:08 181

原创 AcWing 172. 立体推箱子

题意:箱子是一个长方体,有立着和躺着两种形态,给定图及各点含义,问从起点到终点的最小步数思路:图论最小步数,选择BFS进行求解,不同于常规的搜索的那四个方向,这次是一个长方体滚来滚去,有三种不同的状态,注意一点方向数组不要写错了。其他的详见代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e6+10;int n,m;char mp[550][550];const.

2020-10-11 20:59:33 226

原创 AcWing 171. 送礼物

题意:找到不超过w的最大和思路:首先这道题目肯定是要搜索的,因为如果说用DP做的话,那么这个W值太大了,但是如果说只是普通搜索的话,那么O(2^N)的复杂度足以超时,而且这道题目重点就是,我们已经知道了初态而且还知道了终态,既然如此的话,我们可以选择双向搜索.根据双向搜索的性质,我们大致可以确定当前搜索的范围,首先从前一半个物品中,挑选任意多个物品,然后将这些物品的权值总和加入到数组S中,然后我们就会发现在这个S数组中有很多很多的重复的数值,既然如此,我们不妨将他们统统都删掉,至于如何删掉,相信S.

2020-10-11 11:22:42 208

原创 AcWing 167. 木棒

题意:有一堆木棒他们是从几根等长木棍切出来的,现在知道这堆木棒分别的长度,问你重组成几根等长的木棍且要求该等长最短的长度。思路:这题一开始看的时候我还以为是二分长度不断取小,结果想半天不会。这题其实是一道搜索剪枝,涉及到的剪枝其实还挺巧妙的,首先我们可以对木棒根据长度先排个序从大的开始往后用,如果遍历到他的时候用不上,在组这根木棍也就用不上了,木棒之间除了长度是没有差别的,所以我们只需在意长度大小和数量多少即可,这一波分析完TMD不就是做个桶排序吗。让后我们从最大的木棒长度枚举到所有木棒长度之和,.

2020-10-08 15:11:20 199 1

原创 AcWing 166. 数独

题意:完成数独思路:看到题目,这肯定是搜索,但是试了一发普通的直接就超时了,肯定要加一些剪枝和优化,首先是位运算优化可以将每一行,每一列,每一个九宫格,都利用一个九位二进制数保存,当前还有哪些数字可以填写,再一个我们肯定是从限制性最高的那个点开始填的,其实每次都是填限制最多的那个数,涉及到一个lowbit函数:当前得需要用lowbit运算取出当前可以能填的数字.AC代码:#include<bits/stdc++.h>using namespace std;typedef lon.

2020-10-08 11:26:49 434

原创 ACwing164. 可达性统计

题意:求出每个点可以到达的点的个数思路:就是一个简单的图的暴力,为什么拿出来讲下,是因为看题解的时候看到个东西觉得挺不错的,bitset STL里的一个东西,我们在统计可到达点时可能会有很多,所以可以借助biset里面是以二进制存储的,f[i][j]的含义是指d点i和点j之间可不可以到达,通过f[i].count()就可以统计出他的可到达点的数量。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long l.

2020-10-07 10:36:11 236

原创 ACWing 147.数据备份

题意:选取K对大楼,使得每对距离之和最小,并且一个大楼只会被链接一次思路:当k=1时肯定就是贪心的选取距离最小的那两栋。当k=2时我们是否还要留着距离最小的那一对呢?如果没有选择距离最小的那一对,那肯定要选择最小那一对的左右两对,否则就可以将其中一对换成最小的那对,那样会更小。当k>2时同理如果不选择中间的就必须选择其左右两边的,这样才能保证较小的那对我是因为实在拿不了的才放弃的,否则就可以更优。我们可以用一个双指针链表加一个set来完成这些工作,当删去中间这对时将其左右两对的权值重新加.

2020-10-06 21:51:33 346 1

原创 AcWing 145. 超市 146. 序列

题意:商品有保质期和价值,要在保质期内把商品卖出才有收入,每天只能卖一件,问产品的的最大利益是多少思路:这道题目,我们很容易发现是有一个贪心策略,也就是对于 t 天,我们需要在保证不卖出过期商品的前提下,卖出利润前t大的商品.所以呢,我们可以把商品按照保质时间排序,然后建立一个小根堆,对于每一个数而言,如果说它的过期时间大于当前小根堆的个数,那么我们可以直接将这个货物的价值加入进来,如果说当前过期时间正好等于这个小根堆堆内的个数,那么我们就需要对比一下,如果说这个货物的价值,是高于小根堆的堆顶的话,.

2020-10-06 16:24:37 142

原创 AcWing 144. 最长异或值路径

题意:找到两个点之间的路权值异或和最大。思路:将无根树扯成有根树,将根节点到每个叶子节点的路径异或权值处理出来存起来,然后我们可以遍历取max,因为从根节点到两个叶子节点的值异或起来会把中间重复路径的异或权值消去(异或的性质,相同异或为0),所以借助Trie树就可以了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e6+10;int trie[maxn][2];i.

2020-10-05 21:44:08 126

原创 ACwing 142.前缀统计 143.最大异或对

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e6+10;int trie[maxn][26],tot = 1,End[maxn];void insert(char *str) { int len = strlen(str), p = 1; for(int i=0;i<len;i++) { int ch = str[i]-'a'; if(trie[p.

2020-10-04 21:52:22 1100

空空如也

空空如也

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

TA关注的人

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