摘要:
https://codeforces.com/contest/1256 A:Payment Without Change【思维】 题意:给你a个价值n的物品和b个价值1的物品,问是否存在取物方案使得价值为s 题解:min(s/n,a)*n+b>=s?YES:NO #include<iostream> 阅读全文
摘要:
题解: 首先知道一个性质,每一行每一列都最多有两个炮 那么很显然是DP 设F[i][j][k]表示前i行,有j列有一个炮,有k列有两个炮,那么转移式子为 这一行什么都不做:f[i][j][k]=f[i-1][j][k] 这一行填一个炮在列为0:f[i][j][k]=f[i-1][j-1][k]*c( 阅读全文
摘要:
题目大意:给你一个序列a,你有三个操作,0: x y t将a[x,y]和t取min;1:x y求a[x,y]的最大值;2:x y求a[x,y]的sum 题解:首先很明显就是线段树裸题,那么考虑如何维护 区间最大值和区间sum很好维护,0操作不好做,那么考虑怎么快速解决0操作 很容易想到维护区间最大值 阅读全文
摘要:
题意:给你一个序列,求满足要求的子序列个数,其中要求为: 1、子序列的max-子序列长度len<=k 2、子序列中不出现重复的数字 题解:首先看到子序列max,很容易想到枚举最大值然后分治,这个做法有人通过,但是我并没想到如何做 子序列max还有一个思路是单调队列,这里我们通过单调队列进行解题 首先 阅读全文
摘要:
题目大意:给你一棵树,每个节点有一个权值,Alice和Bob进行博弈,起点由Alice确定,确定后交替选择下一个点,Alice目标是最终值尽可能大,Bob目标是尽可能小 题解:很明显是树形DP,那么考虑如何dp 设F[i][0/1]表示第i个点先手选/后手选的答案 那么不难想到 F[i][0]=ma 阅读全文
摘要:
题目大意:给你ai,bi,限制ai不能流向bi,求最大流 题解:贪心,对于第i个班级,考虑前i-1个班级匹配完剩余多少a,b,将这些ab对第i个班级进行贪心匹配 匹配完若第i个班级还有剩余的ab,考虑将前面的已匹配拆分 考虑如何拆分 若存在a1-b2这样一个匹配,那么可以将它拆开,并与aibi匹配成 阅读全文
摘要:
题目大意:给你一堆数,每次询问区间[l,r]中离p第k小的|ai-p| 题解:考虑二分答案,对于每个可能的答案,我们只需要看在区间[l,r]里是否有≥k个比二分的答案还要接近于p的 考虑下标线段树,并将其可持久化,线段树i存储1~i中每个数有几个 因为数比较大,考虑离散化,这样最多1e5个数,可以接 阅读全文
摘要:
题目大意:给你一个序列,对于每个i,你可以选择1~i-1中任意多的数并将它删去,剩余的数(包括i)∑≤m,问对于每个i最少删几个数可以达到要求 题解: 考虑朴素的思想,对于每个i,我只需要删去最大的若干个使得∑≤m即可,时间复杂度O(n^2) 显然不可接受,考虑优化 显然可以看出,因为只需要删去最大 阅读全文
摘要:
题目大意:给出一串序列,询问最长的合法子串为多长,其中合法子串必须满足子串中[1,C]的数量大于等于K或者为0 题解: 定义右端点为包含某一点所需要的最小区间的右端点 那么初始化时就可以O(n)求出每个点的右端点 定义最小包含区间为某个点到其右端点的区间 定义不同的区间为当两个最小包含区间的最左边元 阅读全文