题意 给定一定条件,问符合的矩阵有几种. 分析 见了鬼了,这破题谁加的brute force的标签,素质极差.因为范围是1e5,那你平方(枚举算法)的复杂度必然爆. 然后你就会思考其中奥妙无穷的数学规律(并没有),推出一系列相关的等式. 然后坑爹无穷的来了:边界问题. 不想说了,心累,自己看代码吧. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB push_back #define fi first #define se…
题意 有n" role="presentation">nn个站点,排成圆形,每站间距m" role="presentation">mm,现从0点出发,提供t" role="presentation">tt个油箱,问:拿走若干个油箱可以让出发者无法到达任意一个站点,这样的方案有多少?(出发者可以顺时针走,也可以逆时针走)数据规模分别为:2 ≤ n ≤ 1000,1 ≤ m ≤ 120,1 ≤ t ≤ …
题意 给定一矩阵M" role="presentation">MM,Mij=ij" role="presentation">Mij=ijMij=ij,求第k大值. 分析 这个题不看题解我是想不到二分的,但是二分当然属于暴力,不爽不要玩;) 实际上,现在做题解的时候,意识到一个有意思的结论:第k大xxx往往都与二分思想有关.我们还会与分治思想再见的. 具体做法:二分第k大值p.求数组中p元素是第几大即可. 代码 #include <…
题意 You are given n points on a line with their coordinates $x_i$. Find the point x so the sum of distances to the given points is minimal. 分析 答案是直觉上显然的:输出数组的中位数即可(对于偶数个数的,则是中间靠左).这样的结果正确的原因也很显然.首先,答案肯定在$[x_{min},x_{max}]$中,那么点无论在哪里,对于$x_i,x_{n-i}$这一对…
题目 分析 这个Rnd353真是神仙题层出不穷啊,大力脑筋急转弯- - 不过问题也在我思维江化上.思考任何一种算法都得有一个“锚点”,就是说最笨的方法怎么办.为什么要这么思考,因为这样思考最符合我们的思维规律.然后从这种最笨的方法中找问题.找漏洞.找关键的变量不变量,就能转化出更好的更快的算法. 这题就是这样.最笨的方法是什么?随便从哪个点出发,按照一个方向一个一个抹平差距.可以保证,n-1次一定完成.那么哪里可以改进?0区间.0区间的时候我们可以不移动:比如说 0 0 2 -2 0 0,那么只…
题意 之后补 分析 我哭了,强行增加自己的思考复杂度...明明一道尬写的题- -(往区间贪心方向想了 其实完全没必要,注意到只有366天,直接穷举判断即可. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB push_back #define fi first #define se second #define ZERO(x) memset((x), 0, sizeof(x)) #define ALL(x) (x).begi…
题意与分析 很简单:求最长公共子序列. 注意子序列与子串的差别:一个不连续一个连续.一份比较好的参考资料见:https://segmentfault.com/a/1190000002641054 状态转移方程是这样的: 设dp[i][j]dp[i][j]为a串1~i.b串1~j中的最长的公共子序列,则 dp[i][j]={dp[i−1][j−1]+1,  max(dp[i−1][j],dp[i][j−1]),  a[i]=b[j],a[i]≠b[j]dp[i][j]={dp[i−1][j−1]+…
题意与分析 中文题就不讲题意了.我是真的菜,菜出声. 不妨思考一下,限制了我们决策的有哪些因素?一,所在的位置:二,所在的时间.还有吗?没有了,所以设dp[i][j]" role="presentation">dp[i][j]dp[i][j]为第i秒在j处的最大馅饼数,有: dp[i][j]=dp[i][j]=max(dp[i−1][j−1],dp[i−1][j],dp[i−1][j+1])+f[i][j]" role="presentation&q…
题意与分析 学习本题的时候遇到了一定的困难.看了题解才知道这是二重背包.本题的实质是二重完全背包.二维费用的背包问题是指:对于每件物品,具有两种不同的费用,选择这件物品必须同时付出这两种代价:对于每种代价都有一个可付出的最大值(背包容量).问怎样选择物品可以得到最大的价值.设第i件物品的两种代价分别为$a_i$和$b_j$,两种代价可付出的最大值(两种背包容量)分别为$V$和$U$,物品的价值为$w_i$,那么我们可以改进原来的状态转移方程,则定义$dp[i][j][k]$为选前i件物品,前两个…
题意与分析 给定立方体(个数不限),求最多能堆叠(堆叠要求上方的方块严格小于下方方块)的高度. 表面上个数不限,问题是堆叠的要求决定了每个方块最多可以使用三次.然后就是对3n" role="presentation">3n3n的方格序列用LIS. 注意:排序和求LIS的标准不同,否则答案会错误. 代码 #include <iostream> #include <cstring> #include <algorithm> #includ…