有空没空多看看
秦始皇吃花椒
这个作者很懒,什么都没留下…
展开
-
[贪心] UVa1153 顾客是上帝 (很巧妙的贪心)
题目 有n(n≤800000)个工作,已知每个工作需要的时间qi和截止时间di(必须在此之前完 成),最多能完成多少个工作?工作只能串行完成。第一项任务开始的时间不早于时刻0。 思路 很强的贪心。 先把任务按截止时间排序,截止时间相同的话再按花费时间排,然后一个个做就行了。 这里需要注意,也是我没想到的是,对于一个遍历到它不能完成的任务,要检查之前“假定完成”的任务里,有没有耗费时间比这...原创 2018-06-12 01:37:37 · 417 阅读 · 1 评论 -
[预处理] UVa1619 感觉不错 (单调栈)(预处理典例)
题目 思路 1.正确思路:利用单调栈,求出每个元素左右第一个比它小的元素位置,然后遍历每个元素,以其作为最小值,与最优解比较即可。理解本题预处理的思想。 2.注意点:本题中的单调栈,置换时应是A[p[t-1]] >= A[i] 而非 A[p[t-1]] > A[i],原因是答案的段越长越好。(例如,4 7 3 3,若只是>的话,最优解为4 7 3,而非4 7 3 3)因...原创 2018-06-14 00:21:33 · 314 阅读 · 1 评论 -
[枚举] UVa1312 球场 (离散化)(技巧枚举典例)
题目 思路 本题的关键就在于枚举的技巧和离散化。 1.离散化:对于一个最大的正方形,其必然至少有两条边上有点,因为没有的话还可以继续扩展。这样就直接将题目给的10000x10000的数据范围离散到了100个树。 2.技巧枚举:枚举正方形对边而不是起始点和边长。首先枚举上边和下边,最后枚举左边和右边。注意枚举左边和右边时,只需在已找到上边下边范围内,找黑点作为分隔符,随后分割成几部分...原创 2018-06-14 01:53:23 · 308 阅读 · 0 评论 -
[直接构造法] UVa1609 Foul Play 不公平竞赛 (复杂推理 + 递归)(难题理解不能)
题目 思路 代码 #include <cstdio> #include <cstdlib> #include <vector> using namespace std; const int maxn = 1024 + 10; char table[maxn][maxn]; int main(){ int n; while...原创 2018-06-08 10:49:37 · 589 阅读 · 4 评论 -
[数形结合] UVa1451 Averange 平均值 (前缀和+斜率优化)(单调栈)
题目 思路 代码 #include <cstdio> #include <cstdlib> const int maxn = 100000 + 1000; int num[maxn], sum[maxn], n, L, p[maxn]; char s[maxn]; // 有效避免除法 int cmp(int x1, int x2, int ...原创 2018-06-09 00:57:53 · 947 阅读 · 0 评论 -
[复杂模拟] UVa10366 龙头滴水(需要一定的推理能力)
题目 思路 (思路来自,aoapc习题选解,陈锋) 1.基本工具: 如果有两个挡板X和Y,X不高于Y,并且X和Y之间没有比Y还高的挡板,那么X左边来的水要流到Y,在接触Y之前,会形成一个阶梯形状。也就是说,从X流到Y所需要的时间就是阶梯下方的面积。 2.回到题目,考虑X=0的左右两边最高的挡板高度LH、RH,以及其位置(LHi, RHi)。 3.如果LH == RH ...原创 2018-06-16 23:20:12 · 371 阅读 · 0 评论 -
[贪心] UVa1614 股市 (结论题)
题目 输入一个长度为n(n<=100000)的序列a,满足1<=aiaia_i<=i,要求确定每个数的正负号,使得所有数的和为0. 思路 1.首先我们需要证明,对于满足1≤aiaia_i≤i的序列,1~ sum[i]的任意一个整数都可以用a[1~i]的和表示。证明方法是数学强归纳法: 假设对于任何n≤k,上述结论成立。那么只需证明n=k+1也成立即可,即sum[k]+...原创 2018-06-10 23:53:46 · 261 阅读 · 1 评论 -
[线性DP] UVa1625 颜色长度 (LRJ代码)(多状态DP)
题目 思路 1.本题可以说是有难度了,首先思路就不好想到,DP有两个状态,两个状态分别有自己的状态转移方程。其次代码实现起来,细节很多,自己尝试写了一下,debug了一下午也没搞出来,只能搬来LRJ的代码了。 2.回顾一下本题的思考过程: 首先,可以想到LCS,因为每次都是从两个序列种的一个拿元素。最基本的状态就想到了,d(i,j),表示从两个序列分别拿走i,j个元素后最小的指标函...原创 2018-07-08 10:54:47 · 265 阅读 · 0 评论 -
[多维DP] UVa1412 基金管理(九元组及编解码)(状态池)
题目 思路 本题的基本思路是明确的,用d(i,p)表示经过i天之后,资产组合为p时的现金的最大值。 另外值得注意的是,本题在考虑买股票时要考虑到当前拥有的现金是否足够,因此不是一个DAG最长/最短路问题,因为某些边u->v的存在性依赖于起点到点u的最短路值。也就是说,本题不能像之前的DAG问题一样“反着定义”:如果用d(i,p)表示资产组合为p,从第i天开始到最后能拥有的现金最大值...原创 2018-07-12 16:35:50 · 515 阅读 · 3 评论