摘要: 题意:给定一个只包含0和1的数组a,可以对a进行以下操作: 选定两个下标不同的元素ai和aj,将ai加到aj上,再从数组中删除ai。 问最少操作多少次,可以让数组a变成单调非下降子序列(即ai<=aj, 1 <= i < j <= n)。 思路:双指针扫一遍数组中的元素,i = 0, j = n - 阅读全文
posted @ 2022-11-07 12:35 xioachou 阅读(96) 评论(0) 推荐(0)
摘要: 从n种邮票中选出不超过k张邮票,使选出来的邮票可以表示1~m之间(含)的所有数。 每张邮票在不超过k的前提下,都可以使用无数次,因此可以将问题看成一个完全背包问题。n种邮票就是n种物品,邮票面值就是体积,价值就是选出邮票的数量。问题转化为在n个物品里选出体积恰好为m且总价值最小的完全背包问题。 最后 阅读全文
posted @ 2022-11-06 13:18 xioachou 阅读(172) 评论(0) 推荐(0)
摘要: 这题乍一看是一个朴素的01背包问题,将所有方案的集合按照能力值的和来划分成1~m,然后把m当作体积,把n当作物品数,做一个01背包的代码。于是我兴冲冲地写了代码交上去,然后十组样例只过了八组,另外两个一个MLE, 一个TLE。然后仔细一看数据范围,才发现能力值的和太大了,按照能力值的和来划分子集肯定 阅读全文
posted @ 2022-11-05 17:29 xioachou 阅读(83) 评论(0) 推荐(0)
摘要: 题目链接:点这里 一般这种从某种状态转移到目标状态的最短距离,都可以使用BFS来做。 从题目给定的初始状态,依次执行题目给定的三种操作,分别是交换上下两行(操作A)、将最后一列插入到第一列的前面(操作B)、将中间的矩形按照顺时针旋转90度(操作C),将这些操作存到哈希表里,由BFS的特点可知,我们如 阅读全文
posted @ 2022-11-04 17:24 xioachou 阅读(56) 评论(0) 推荐(0)
摘要: 1 #include <iostream> 2 using namespace std; 3 4 int main() { 5 int n; 6 cin >> n; 7 int c = 1, a = 0, b = 0; 8 for(int i = 1; i <= n; i++) { 9 int x 阅读全文
posted @ 2022-11-04 15:54 xioachou 阅读(69) 评论(0) 推荐(0)
摘要: 感觉题目还是比较水的,我这个蒟蒻也能写出来hh。 思路:f[i]是前i个人(包含第i个)买票需要花费的总时间,第i个人买票所需时间,可以自己单买(f[i - 1] + a[i]),也可以和前面那个人拼团hh(f[i - 2] + to[i]),前提是他前面得有人才行(i >= 2)。 方程为f[i] 阅读全文
posted @ 2022-11-03 22:45 xioachou 阅读(26) 评论(0) 推荐(0)
摘要: ​ 原题链接:点这里 题目要求两块石头之间的最短距离最大,我们就可以二分找到最大的最短距离。 由于起点和终点的距离为L, 1<=L<=1e9,所以我们就可在这个区间内二分找到最大的最短距离。 因为对于一个确定的距离len,如果拿掉一部分石头(设数量为k)后,剩下的石头都满足两两之间的距离大于等于le 阅读全文
posted @ 2022-11-03 22:26 xioachou 阅读(108) 评论(0) 推荐(0)