摘要: 传送门 解题思路 这一道题和中位数那道题很像,如果不会中位数请先看一下那道题——中位数 这道题和那道题不同的地方在于: 那道题的第一个大根堆队列的数字数量是数字总数的一半,是根据数学知识计算出来的,并且输出是每两个数输出一个; 这道题的第一个大根堆队列的数字数量是get(i)中的i,每用一次get函 阅读全文
posted @ 2019-12-26 21:11 尹昱钦 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 首先是暴力做法: 从1开始枚举时间,每一次加一,判断有没有新的任务到达,然后挑出优先队列中的优先值最大的,执行一秒钟,在放回队列中。 显然是TLE的! 接着想一下优化: 找一找那里可以优化,发现只有时间!所以我们每一次取出队首(任务a)有两种情况——第一种是现在的时间+a的剩余完成 阅读全文
posted @ 2019-12-26 19:49 尹昱钦 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 最长上升子序列 传送门 题意 对于给定的一个n个数的序列,找到它的一个最长的子序列,并且保证这个子序列是由低到高排序的。 例如,1 6 2 5 4 6 8的最长上升子序列为1 2 4 6 8。 基本思路 非常显然,这类题用dp求解。 dp[i]表示已i为结尾的最长上升子序列的长度,首先枚举每一个末尾 阅读全文
posted @ 2019-12-14 22:24 尹昱钦 阅读(701) 评论(0) 推荐(2) 编辑
摘要: 传送门 解题思路 第一眼的贪心策略:每次都选最大的。 但是——不正确! 因为选了第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 尹昱钦 阅读(254) 评论(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 尹昱钦 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 很容易想到用最短路来解决这一道问题(题解法),因为两个点之间可以互相无限走,所以如果到某个点的最短路是x,那么x+2,x+4也一定能够达到。 但是如何保证这是正确的呢?比如说到某个点的最短路是x,为什么不可能走一下弯路,是某一条路径的长度是x+1或者x+3或者x+5呢? 所以就用到 阅读全文
posted @ 2019-12-06 21:10 尹昱钦 阅读(732) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 本题首先要明白,在每一天时,最优策略是先进行操作2(卖),再进行操作1(买),才能是利益最大化。 本题很显然当只有两天时,是一个完全背包,就是把当日价钱当做体积,把明日价格和今日价格的差作为价值,跑一边完全背包即可。时间复杂度O(TNM) 然后我们考虑满分做法——我们用dp[j]表 阅读全文
posted @ 2019-12-04 00:21 尹昱钦 阅读(1070) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 先把所有的数据读下来。 对于地铁,答案直接加,然后把编号放入一个数组a内。 对于公交车,从前往后枚举a数组,然后找到出现最早的且符合价钱大于等于公交车的价钱,然后把这个数删除(变为0)。 然后再考虑有效期是45分钟,为了优化时间,我们可以每一次把数组看做一个队列,当a[first] 阅读全文
posted @ 2019-12-01 20:36 尹昱钦 阅读(1191) 评论(0) 推荐(1) 编辑
摘要: 传送门 洛谷改域名了QAQ 解题思路 没什么好说的,一道红题,本不想发这篇博客 ,但还是尊重一下CCF吧QAQ,怎么说也是第一年CSP呢! 用getchar一个个读入、判断、累加,最后输出即可。 不过要注意getchar是包含在cstdio库里的。 AC代码 1 #include<iostream> 阅读全文
posted @ 2019-12-01 12:15 尹昱钦 阅读(442) 评论(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 尹昱钦 阅读(168) 评论(0) 推荐(1) 编辑
摘要: 传送门 解题思路 就是暴力!!! 没什么好说的,总之,就是枚举每一个起点,然后暴力算一遍以这个点为起点的所有路径,在算的过程中,只要比目前找到的答案更优,就有可能是最后的答案,于是就把路径更新一遍,保证不错过正确答案。 由于数据很水<21,所以放心暴力! AC代码 1 #include<iostre 阅读全文
posted @ 2019-11-13 23:49 尹昱钦 阅读(229) 评论(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 尹昱钦 阅读(400) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 很显然,为了让最大值最小,肯定就是从大到小枚举,让他们分在两个监狱中,第一个不符合的就是答案。 怎样判断是否在一个监狱中呢? 很显然,就是用种类并查集。 种类并查集的讲解——团伙(很像的一个题) 很裸的一个种类并查集。 当然,也可以用二分+二分图染色来解决。 AC代码 1 #inc 阅读全文
posted @ 2019-11-08 22:10 尹昱钦 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 加权并查集: 什么是加权并查集? 就是记录着每个节点到它的父亲的信息(权值等)。 难点:在路径压缩和合并节点时把本节点到父亲的权值转化为到根节点的权值 怎么转化呢? 每道题都不一样QAQ 看一看这道题我们用r[x]=0表示是x和f[x]是同种生物,等于1表示x吃f[x],等于2表示 阅读全文
posted @ 2019-10-31 23:34 尹昱钦 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 第一种: 对于选i家,很显然,a值前i-1家的一定会选,所以只需要考虑最后一家的选法。要么是选择a值第i大的(就不管s了),要么选择剩下的中s最大的。 我们把每一家的情况(s和a)存入几个结构体中,按照a的值从大到小排序,再用sum求出a的前缀和,用maxs[i]表示前i家中最大的 阅读全文
posted @ 2019-10-29 23:06 尹昱钦 阅读(306) 评论(0) 推荐(0) 编辑