自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ray.C.L的博客

TA很懒什么都没留下

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

原创 任务安排(dp)

思路:dp[i]表示从1——i任务划分完后的最小值,dp[i]肯定是从上一个划分来的上一个划分分为2部分一遍是1——j随便划分也就是dp[j],剩下的部分就从j到i那么我们就需要求从j到i的费用,因为从j挺我们首先要加上机器启动时间这个启动时间时间会对后面全部造成影响我们直接算费用就是s*(sumc[n]-sumc[j])然后就是从j到i的每个任务的费用就是sum[i]*(sumc[i]-sumc[j]),可得状态转移方程是dp[i]=min(dp[i],dp[j]+sumt[i]∗(sumc[i]−su.

2020-10-31 16:20:29 441

原创 理想正方形(滑动窗口)

思路:对每一行求一下长度为k的滑动窗口的最小值和最大值然后再对列求一次,在k*k处开始遍历。#pragma GCC optimize(2)#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<vector>#include<queue>#include<map&g.

2020-10-30 21:50:52 158

原创 绿色通道(单调队列优化,dp,二分)

思路:找最小值最大首先想到二分,我们发现这个时间t对答案来说满足单调性,所以我们二分答案,check时,我们发现就是判断长度为x的区间最小值是否小于t,dp[i]表示1——i-1位置满足题意且i位置必须写题,那么可以得dp[i]=min(dp[j])+w[i]我们用单调队列维护dp[j]即可#pragma GCC optimize(2)#include <cstdio>#include <cstring>#include <algorithm>#include.

2020-10-28 21:35:35 297

原创 奶牛异或(01字典树)

思路:区间异或的值用前缀和的思想,x^ x2…^xn是1——n的异或值 x…x2n是1——2n的异或值或者这两个数异或一下就是n——2n的异或值,那么求奶牛区间异或值最大,我们就可以吧前缀异或值建树,从中找2个异或值最大的就是要的答案,为了保证最短并且等级最高,我们从前往后每次进来一个数先求树中最大的异或值然后再把他加进去。为了记录位置,我们再sum[root]里面记录数的位置。//#pragma GCC optimize(2)#include<bits/stdc++.h> using.

2020-10-28 20:57:10 220

原创 烽火传递(单调队列优化dp)

思路:dp[i]表示从1——i符合条件的的方案且点燃i烽火台的最小代价。那么可以发现i烽火台点燃那么离他最远必须点燃的是在i-m那么从i-m——i之间的最小值加上点燃i烽火台的代价就是dp[i]可得转移方程是dp[i]=min(dp[j])+a[i](i−m<=j<=i)min(dp[j])+a[i] (i-m<=j<=i)min(dp[j])+a[i](i−m<=j<=i) 最后答案从i-m+1到i取最小值,这时是O(n*m)会T我们可以发现求dp[j]就是个长度为m.

2020-10-25 17:26:21 287

原创 旅行问题(单调队列优化)

思路:首先吧环变成链,然后我们发现判断每个点能不能走一圈,就是判断最后到终点的油量是不是大于等于0,s[i]为从i点到i+1点时油量的剩余量,我们计算一下s[i]的前缀和,看他从i——i+n-1这个范围内的每个前缀和都大于0,s[j]-s[i]>=0就是找长度为n的前缀和的最小值s[j],用单调队列去维护,逆时针的时候从后往前看就是s[i]-s[j]>=0找s[j]的最大值#pragma GCC optimize(2)#include <cstdio>#include &l..

2020-10-25 15:37:16 303

原创 起床困难综合征(按位贪心)

思路:从0-M中选出一个数使得其求多个位运算后的最大值,位运算当时是按位去算,那么我们要使得最后答案尽可能就从高位向低位枚举看这个位能不能填1,我们首先假设从M中选的是每一位全0和每一位全1,经过几次位运算后,得到最后的答案,通过这个答案我们就可以观察出最后的答案ans的每一位到底是选1还是0,如果此时选0或者1都可以那么选0,(优选选全0状态下此位为1的),如果不行的话,我们看看当m中选出的这个数的这一位是1的时候能不能使答案的这一位是1。#pragma GCC optimize(2)#includ.

2020-10-25 10:35:39 255

原创 修剪草坪(动态规划+单调队列优化)

思路:dp[i]表示前i个奶牛符合条件的最大值是多少,那么可以发现他是由前i-1个合法选第i个时不合法或者是在前i-j-1(0<=j<=k)选出合法奶牛的最大价值然后加上后面i-j——i的奶牛价值dp[i]=max(dp[i-1],dp[i-j-1]+s[i]-s[i-j])因为s[i]是固定的所有可以吧(dp[i-j-1]-s[i-j])看成一起也就是求s[i-j]最小那么我们用个单调队列去维护合法区间的最小值(滑动窗口)#pragma GCC optimize(2)#include ..

2020-10-20 23:07:39 446

原创 最大子序列和(单调队列优化)

思路:求区间和用前缀和求,假设现在在i点我们要求的就是i-m+1——i点这段的max(s[i]-s[j]) i-m+1<=j<=i,所以我们只需要找到这个区间里面最小的s[j]即可,我们用个单调队列去维护长度为m的s[j]#pragma GCC optimize(2)#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iost.

2020-10-18 12:15:44 318

原创 修改数组(并查集)

思路:我们吧数分成已存在和不存在2个集合,因为我们只需要知道当前数是否存在于集合已经该集合的最大值,那么我们就可以用用并查集去做,我们把已存在集合最大值作为根节点,每次询问的时候直接输出,之后把它接到更大的根节点上,因为可能是1e5个1e6所以fa开大点不然会WA。#pragma GCC optimize(2)#include <cstdio>#include <cstring>#include <algorithm>#include <set>.

2020-10-13 11:00:35 250

原创 网络分析(带权并查集)

思路:用带权并查集dis[i]记录i到根节点所需的价值,因为在有些点加权时,还未与其他点相连,故而不会传数据给后来的点,需要val数组记录每个点的值#pragma GCC optimize(2)#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<vector>#include&l..

2020-10-12 20:41:46 181 1

原创 数字游戏II(数位dp)

思路:f[i][j][k]表示为共i位,最高位是j,且各个位数之和取模后的值为k的数的个数,可以发现他是由前面i-1位各个位数之和为k-j取模后得来的,f[i][j][k]+=f[i-1][0-9][k-j % N],然后对他的每一位考虑,假设此时最高位为an,次高位为x,次高位后面每位之和为y,由题可知[an+x+y]%N == 0 我们可以变成y ==-(an+x)那么我们就根据这个可以知道每一位的余数应该是多是。#pragma GCC optimize(2)#include <cstd.

2020-10-09 21:01:26 338

原创 Windy数(数位dp)

思路:dp[i]表示从0——i满足条件的所有数的数量,那么求dp[r]-dp[l-1],我们按每一位去考虑首先我们要算出每一位的满足条件的数量f[i][j]表示共有i位且最高位为j满足条件的数的个数我们枚举0-9每一位满足条件的情况每一位都是由前一位累加得的。f[i][j]+=f[i-1][j],dp时我们根据前一位看当前位加上windy数,如果不满足windy数直接退出,最后再加上1-N-1位的每种以0结尾的windy数的个数#pragma GCC optimize(2)#include <c.

2020-10-08 22:36:13 333

原创 数学游戏(数位dp)

思路:dp[i]表示从0—i所有满足条件数的数量,然后对每一位考虑,如果当前位是大于等于前面一位的那么就加上此时满足条件的个数继续向下一位看,否则则后面的数都不满足直接退出。那么我们就需要知道在共i位时且最高位(最左端)是j的不降数(0<=j<=9)的个数有多少,我们用f[i][j]表示这个状态,那么可以发现当第i位是j时,他的数量一定是由i-1位且最高位是j-9之间的和那么可得f[i][j]+=f[i-1][j-9],那么我们先预处理一下f[15][9]即可,然后dp求解#pragma G.

2020-10-07 21:50:20 239

原创 度的数量(数位dp)

思路:我们用dp[i]表示满足条件的从0-n的个数,求区间R-L的数就是求dp[r]-dp[l-1],首先我们把数字 n 对于B进制来进行分解 ,将每一位上的数字存入一个数组中,然后从高位往低位去讨论,首先 对于第 i 位数字 x 有两种情况x = 1 :则 i 位上取 0 的时候,后面i-1位都可以随意取值 ,取 1 的时候,后面i- 1位要再小于题目的数的前提下取值,并且能取 k-last-1 个 1 ,用组合数算出来x > 1 :则 i 位上 可以取 1 ,0 ,并且后面 i-1 位可以.

2020-10-06 18:31:15 1297 4

原创 皇宫看守(树形dp)

思路:根据题意我们可以将每个点划分成3种状态1.该节点由父节点处放置的守卫看护2. 该节点由子节点处放置的守护看护3.该节点由在该节点放置的守卫看护下面考虑状态转移的过程,建立数组f[i][3],其中dp[i][0]表示第i个节点由父节点处放置的守卫看护下的最小代价dp[i][1]表示第i个节点由子节点处放置的守卫看护下的最小代价dp[i][2]表示第i个节点由在该节点放置的守卫看护下的最小代价可以发现在状态1时我们只需要考虑子节点的2种情况放看守或者子节点又子节点的子节点看守,可得dp..

2020-10-04 23:24:48 298

原创 数字转化(树形dp)

思路:先求出n的所有约数之和,然后在符合条件的两个数之间建边,小的点是父节点,然后跑一遍树上最长距离。#pragma GCC optimize(2)#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<vector>#include<queue>#include<.

2020-10-02 20:59:36 345

原创 树的中心(树形dp)

思路:要找一个最大距离最小的点,那么有2个方向1.这u点下面最远距离2.这个u点上面的最远距离,这里向上走有2种走法,一直是直接求u点的子节点没有访问过求向上和向下的最大值,访问过则求向上最大值和向下次大值的最大值,这里需要记录一下路径用p1[i]记录最大距离从i经过的话是由那个点过来的,p2[i]记录次大。#pragma GCC optimize(2)#include <cstdio>#include <cstring>#include <algorithm>.

2020-10-01 23:12:10 482

安卓studio最新版 android-studio-2021.3.1.16-windows.exe

安卓studio最新版 android-studio-2021.3.1.16-windows.exe

2022-09-19

空空如也

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

TA关注的人

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