随笔分类 -  题解

摘要:传送门 解题思路 很容易我们可以得出结论, 当地板上的玩具数不足k个时,直接放。 当玩具数量等于k时,从地板上拿走的玩具一定是在地板上玩具中,下一次使用昨晚的那一次。 所以我们用一个优先队列存地板上的玩具,重载运算符,比较next[i]的大小。 接下来想一下怎么求next数组。 可以倒着枚举玩具序列 阅读全文
posted @ 2019-12-27 21:03 尹昱钦 阅读(205) 评论(0) 推荐(0)
摘要:传送门 解题思路 这一道题和中位数那道题很像,如果不会中位数请先看一下那道题——中位数 这道题和那道题不同的地方在于: 那道题的第一个大根堆队列的数字数量是数字总数的一半,是根据数学知识计算出来的,并且输出是每两个数输出一个; 这道题的第一个大根堆队列的数字数量是get(i)中的i,每用一次get函 阅读全文
posted @ 2019-12-26 21:11 尹昱钦 阅读(275) 评论(0) 推荐(0)
摘要:传送门 解题思路 首先是暴力做法: 从1开始枚举时间,每一次加一,判断有没有新的任务到达,然后挑出优先队列中的优先值最大的,执行一秒钟,在放回队列中。 显然是TLE的! 接着想一下优化: 找一找那里可以优化,发现只有时间!所以我们每一次取出队首(任务a)有两种情况——第一种是现在的时间+a的剩余完成 阅读全文
posted @ 2019-12-26 19:49 尹昱钦 阅读(173) 评论(0) 推荐(0)
摘要:传送门 解题思路 第一眼的贪心策略:每次都选最大的。 但是——不正确! 因为选了第i个树,第i-1和i-1棵树就不能选了。所以,要有一个反悔操作。 选了第i个后,我们就把a[i]的值更新为a[l[i]]+a[r[i]]-a[i]。 然后这样如果发现选i-1和i+1更优时,再次加上a[i],结果就变成 阅读全文
posted @ 2019-12-13 21:08 尹昱钦 阅读(287) 评论(0) 推荐(0)
摘要:传送门 解题思路 首先读入a、b数组后,sort一遍(从小到大),然后把a[1]+b[1],a[2]+b[1],a[3]+b[1]……a[n]+b[1]全部加入一个优先队列q(小根堆)。 然后从一到n循环,每一次取出队列中的最小的元素(假设是a[i]+b[j]),输出数值,然后把数值修改为a[i]+ 阅读全文
posted @ 2019-12-10 23:33 尹昱钦 阅读(224) 评论(0) 推荐(0)
摘要:传送门 解题思路 很容易想到用最短路来解决这一道问题(题解法),因为两个点之间可以互相无限走,所以如果到某个点的最短路是x,那么x+2,x+4也一定能够达到。 但是如何保证这是正确的呢?比如说到某个点的最短路是x,为什么不可能走一下弯路,是某一条路径的长度是x+1或者x+3或者x+5呢? 所以就用到 阅读全文
posted @ 2019-12-06 21:10 尹昱钦 阅读(1019) 评论(0) 推荐(0)
摘要:传送门 解题思路 本题首先要明白,在每一天时,最优策略是先进行操作2(卖),再进行操作1(买),才能是利益最大化。 本题很显然当只有两天时,是一个完全背包,就是把当日价钱当做体积,把明日价格和今日价格的差作为价值,跑一边完全背包即可。时间复杂度O(TNM) 然后我们考虑满分做法——我们用dp[j]表 阅读全文
posted @ 2019-12-04 00:21 尹昱钦 阅读(1101) 评论(0) 推荐(0)
摘要:传送门 解题思路 先把所有的数据读下来。 对于地铁,答案直接加,然后把编号放入一个数组a内。 对于公交车,从前往后枚举a数组,然后找到出现最早的且符合价钱大于等于公交车的价钱,然后把这个数删除(变为0)。 然后再考虑有效期是45分钟,为了优化时间,我们可以每一次把数组看做一个队列,当a[first] 阅读全文
posted @ 2019-12-01 20:36 尹昱钦 阅读(1448) 评论(0) 推荐(1)
摘要:传送门 洛谷改域名了QAQ 解题思路 没什么好说的,一道红题,本不想发这篇博客 ,但还是尊重一下CCF吧QAQ,怎么说也是第一年CSP呢! 用getchar一个个读入、判断、累加,最后输出即可。 不过要注意getchar是包含在cstdio库里的。 AC代码 1 #include<iostream> 阅读全文
posted @ 2019-12-01 12:15 尹昱钦 阅读(480) 评论(0) 推荐(0)
摘要:传送门 解题思路 一道裸的dp。 用dp[i][j][k][kk]表示用i个1步,j个2步,k个3步,kk个4步所获得的最大价值,然后状态转移方程就要分情况讨论了(详见代码) 然后就是一开始统计一下几步的卡片共有几张存在num里。 这道题的范围小,所以可以大胆的用思维数组QAQ!!! AC代码 1 阅读全文
posted @ 2019-11-14 00:08 尹昱钦 阅读(189) 评论(0) 推荐(1)
摘要:传送门 解题思路 就是暴力!!! 没什么好说的,总之,就是枚举每一个起点,然后暴力算一遍以这个点为起点的所有路径,在算的过程中,只要比目前找到的答案更优,就有可能是最后的答案,于是就把路径更新一遍,保证不错过正确答案。 由于数据很水<21,所以放心暴力! AC代码 1 #include<iostre 阅读全文
posted @ 2019-11-13 23:49 尹昱钦 阅读(250) 评论(0) 推荐(0)
摘要:传送门 解题思路 一看数据范围<1000就坚定了我暴力的决心(不愧是1996年代的题还是t4QAQ) 所以很显然,暴力之中有一点dp的思想,就是把它们像多重背包一样拆分,拆成a1+a2+a3+a4+a5+a6个砝码,然后枚举一遍,如果vis[j]是1也就是j这个数值可以被表示的话,那么vis[j+a 阅读全文
posted @ 2019-11-13 23:12 尹昱钦 阅读(538) 评论(0) 推荐(0)
摘要:传送门 解题思路 很显然,为了让最大值最小,肯定就是从大到小枚举,让他们分在两个监狱中,第一个不符合的就是答案。 怎样判断是否在一个监狱中呢? 很显然,就是用种类并查集。 种类并查集的讲解——团伙(很像的一个题) 很裸的一个种类并查集。 当然,也可以用二分+二分图染色来解决。 AC代码 1 #inc 阅读全文
posted @ 2019-11-08 22:10 尹昱钦 阅读(218) 评论(0) 推荐(0)
摘要:传送门 解题思路 加权并查集: 什么是加权并查集? 就是记录着每个节点到它的父亲的信息(权值等)。 难点:在路径压缩和合并节点时把本节点到父亲的权值转化为到根节点的权值 怎么转化呢? 每道题都不一样QAQ 看一看这道题我们用r[x]=0表示是x和f[x]是同种生物,等于1表示x吃f[x],等于2表示 阅读全文
posted @ 2019-10-31 23:34 尹昱钦 阅读(337) 评论(0) 推荐(0)
摘要:传送门 解题思路 第一种: 对于选i家,很显然,a值前i-1家的一定会选,所以只需要考虑最后一家的选法。要么是选择a值第i大的(就不管s了),要么选择剩下的中s最大的。 我们把每一家的情况(s和a)存入几个结构体中,按照a的值从大到小排序,再用sum求出a的前缀和,用maxs[i]表示前i家中最大的 阅读全文
posted @ 2019-10-29 23:06 尹昱钦 阅读(360) 评论(0) 推荐(0)
摘要:传送门 这是一道典型的单调栈。 题意理解 先来理解一下题意(原文翻译得有点问题)。 其实就是求对于序列中的每一个数i,求出i到它右边第一个大于i的数之间的数字个数c[i]。最后求出和。 首先可以暴力求解,时间复杂度o(n^2)显然TLE。 然后就是用单调栈来做。 单调栈 单调栈就是维护一个栈,使得栈 阅读全文
posted @ 2019-10-23 23:26 尹昱钦 阅读(163) 评论(0) 推荐(0)
摘要:传送门 解题思路 不会错排问题的请移步——错排问题 && 洛谷 P1595 信封问题 这一道题其实就是求对于每一行的每一个棋子都放在没有障碍的地方的方案数。 因为障碍是每行、每列只有一个,所以答案不受障碍的影响。 这里障碍就等于是信封,棋子就等于是信,也是求所有的信都放错信封的方案数。 显然是错排问 阅读全文
posted @ 2019-10-22 23:20 尹昱钦 阅读(243) 评论(0) 推荐(0)
摘要:传送门 解题思路 看第一个要求,很显然是求最长下降子序列,和LIS几乎一样,很简单,再看第二个问号,求最长下降子序列的方案数??这怎么求? 注意:当二种方案“看起来一样”时(就是说它们构成的价格队列一样的时候),这2种方案被认为是相同的。 这里就用到了一种基于dp的dp。 我们用a[i]存原来的数, 阅读全文
posted @ 2019-10-14 21:57 尹昱钦 阅读(219) 评论(0) 推荐(0)
摘要:传送门 解题思路 首先看题目问题,求经过的所有城市中最多的一次收取的费用的最小值是多少。一看“最大值最小”就想到了二分答案。 在读一遍题目,就是二分收取的费用,然后对于每一个二分的费用,跑一边最短路,要求不经过>收取费用的城市,最后看一看能否在规定血量内走到终点。 想起来还是比较容易的,写起来要注意 阅读全文
posted @ 2019-10-07 00:35 尹昱钦 阅读(251) 评论(0) 推荐(0)
摘要:传送门 一道裸的错排问题 错排问题 百度百科上这样说 就是对于一个排列,每一个数都不在正确的位置上的方案数。n 个元素的错排数记为 D(n)。 公式 D(n)=(n−1)∗(D(n−2)+D(n−1)) 推出公式(感性) 对于第n个数,放在k位置上。 而第k个数有两种情况: 当第k个数放到n位置时, 阅读全文
posted @ 2019-10-05 17:56 尹昱钦 阅读(203) 评论(0) 推荐(0)