自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

OI - IceCab

about oi

  • 博客(51)
  • 收藏
  • 关注

原创 [动态规划] UVa11400 照明系统设计(线性DP)

题目思路1.首先有结论,每种电压的灯泡,要么全换要么不换,一种电压灯泡部分换部分不换易证是不划算的。 2.状态定义:d(i),灯泡1~i的最小开销。 3.初状态:d[0]=0,d[1]= A[1].K + A[1].L * A[1].C, d[2~n] = INF。 4.答案:d[n] 5.状态转移方程: d(i)=min{d(j)+(s[i]−s[j])∗c[i]+k[i]...

2018-06-25 00:43:44 237

原创 [动态规划] UVa11584 划分成回文串 (线性DP)(回文串判断)

题目思路1.先进行回文串打表,判断回文串的方法:枚举中心,然后向两边延伸。 2.状态定义:d(i),字符1~i划分成的最小回文串个数。 3.初状态:d[0]=0,d[1..n]=INF。(INF是为了配合状态转移时的max) 4.答案:d[n] 5.状态转移方程: d(i)=min{d(j)+1|s[j+1...i]是回文串}d(i)=min{d(j)+1|s[j+1...i...

2018-06-25 00:09:57 192

原创 [模型] LCS 最长公共子序列 (线性动态规划)

模型描述算法1.状态及指标:d(i,j),表示序列N[1…i], M[1…j]的LCS长度。 2.初始状态:d[0][0] = d[0][1] = d[1][0] = 0。 3.答案:d[N.length()][B.length()]。 4.状态转移方程: d(i,j)=max{d(i−1,j−1)+1ifN[i]==M[j],d(i−1,j),d(i,j−1)}d(i,j)=...

2018-06-24 22:54:52 291

原创 [动态规划] 洛谷P1064 金明的预算方案 (01背包)

题目LP1064思路本质就是个01背包,不过是每个状态的决策数从两个变成了五个,只是复杂些而已。 五种决策: 1.不拿本物体。 2.只拿本物体。 3.只拿本物体与附物体1。 4.只拿本物体与附物体2。 5.拿本物体,附物体1与附物体2。 其它与简化版相同。代码#include <cstdio>#include <cstdlib>#i...

2018-06-22 01:38:12 227

原创 [动态规划] 洛谷P1049 装箱问题 (01背包)

题目LP1049思路本题唯一难度在于发现,问题的隐藏价值W[i] = V[i]。分清消耗量与价值量,并且有时它们甚至还会相等。 剩下的就是裸01背包。代码#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include &l...

2018-06-22 01:33:12 247

原创 [动态规划] 洛谷P1616 疯狂采药 (完全背包问题)

题目LP1616思路完全背包裸题代码#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#define _for(i,a,b) for(int i = (a); i<(b);...

2018-06-22 01:29:38 361

原创 [动态规划] 洛谷P1048 采药 (01背包裸题)

题目LP1048思路01背包裸题,不赘述代码#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#define _for(i,a,b) for(int i = (a); i...

2018-06-22 01:26:49 681

原创 [动态规划] 洛谷P1060 开心的金明(01背包裸题)

题目LP1060思路1.状态及指标:d(i,j),遍历到第i个数,还剩钱数,值为乘积 2.状态转移方程: d(i,j)=max{d(i−1,j),d(i−1,j+V[i])+W[i]∗V[i]}d(i,j)=max{d(i−1,j),d(i−1,j+V[i])+W[i]∗V[i]} d(i,j) = max \left\{ d(i-1,j) , d(i-1,j+V[i]) + ...

2018-06-22 01:24:00 703

原创 [动态规划] UVa12563 劲歌金曲 (01背包问题)

题目思路01背包问题 1.状态定义:(i,j), 遍历到i时,剩余时间为T 2.指标函数:d(i,j), 唱了歌数 3.答案:d(n,1~TT), 边界:d[1][TT] = 0, d[1][TT-time[1]] = 1; 4.状态转移方程: d(i,j)={d(i−1,j),d(i−1,j+time[i]+1)}d(i,j)={d(i−1,j),d(i−1,j+time[...

2018-06-21 23:40:42 211

原创 [动态规划问题] 01背包问题(多阶段决策问题)

题目思路1.状态的推导:最初会想到d(S)表示,0->S的最大边权值。但这样的状态,转移时是无序的,也就是无法确定下一个要装的物品i,是否已经被装过。所以应该将状态转移有序化,也就是通过状态就能表现出哪些物品拿了哪些没有。所以状态定义为(i,j),第i层剩余容量为j。 2.状态及指针函数:d(i,j),处于第i层(前i个物品已经遍历),背包剩余容量为j,这种情况的最大边权(最大...

2018-06-21 00:39:09 627 1

原创 [动态规划] NYOJ311 完全背包问题

题目思路1.状态及指标函数:d(S),S->0的最大边权路 2.状态转移方程: d(i)=/left/d[i−Vx]+Wx/right/d(i)=/left/d[i−Vx]+Wx/right/ d(i) = /left/{ d[i-V_x] + W_x /right/} 3.本题NYOJ有点卡常的感觉,记忆化搜索TLE,普通递推TLE,必须把递推的顺序反以下才能AC。...

2018-06-20 23:52:35 198

原创 [动态规划] UVa116 单向TSP (多阶段决策问题)

题目思路多阶段图的最短路 1.本题中,每一列就是一个阶段,每个阶段都有3种决策:直行,右下和坐上。 2.状态定义:(i,j),出于第j列第i行。 3.指标函数:d(i,j),从格子(i,j)出发到最后一列的最短边权路。(最短边权路,是将格子数字大小作为边的权,即数字之和最小的路) 4.状态转移方程: d(i,j) = min\{d(i+1,j+1),&nb...

2018-06-20 23:10:04 229

原创 [动态规划] UVa1347 旅行 (DAG的固定起点终点的最短路)

题目思路1.抽象(神乎其技):由于从左到右不方便思考,可以将问题转换为,两个人同时从最左点出发,沿着两条路径走,最后都走到最右点,并且除了起点和终点外每个点恰好被一个人走过。 2.状态定义:(i,j),表示1~i已经全部走过,且两个人分别位于i,j(i>j)。 3.指标函数:d(i,j),还需要走的距离。 4.状态转移方程: d(i,j)=min(d(i+1,j)+d...

2018-06-20 01:40:11 1104

原创 [动态规划] UVa437 巴比伦塔 (DAG的不确定起点终点的最长路)

题目有n(n≤30)种立方体,每种都有无穷多个。要求选一些立方体摞成一根尽量高的柱子 (可以自行选择哪一条边作为高),使得每个立方体的底面长宽分别严格小于它下方立方体的底面长宽。思路DAG的不确定起点终点的最长路 1.状态及指标函数:d(i),在编号为i的立方体做塔的最底部,所能叠出的最高高度。(包括此立方体) 2.状态转移方程: d(i)=maxd(j)+i.h|(j,i)∈E...

2018-06-20 00:52:32 444

原创 [动态规划] UVa1025 城市里的间谍 (DAG的固定起点终点最长短路)

题目思路本题的难点在于抽象,由于时间本身就是一个天然的“序”,所以可以由时间和所在车站组成状态。 1.状态定义:(T,i),在T时刻位于i车站。 2.指针函数:d(T,i),还需在车站等待多长时间。 3.状态转移方程: 取决于对于每个状态,有三种决策: - 等1分钟。 - 乘坐往右开的车,去向右第一个车站。(有车的话) - 乘坐往做开的车,去向左第一个车站。(有车的话)...

2018-06-20 00:23:56 234

原创 [动态规划] aoapc-ch9 硬币问题 (DAG的不固定起点终点的最长短路)

题目思路DAG的固定起点和终点的最短路和最航路问题。 0.抽象:初始状态为S,末状态为0,每次使用一个硬币,状态由S’变为S’-V[i]。为DAG。 1.状态及指标函数定义:mind[i]:0->i最短路长度,maxd[i]:0->i最长路长度。 2.状态转移方程: mind(i)=minmind(i−Vx)+1,x∈[0,n)mind(i)=minmind(i...

2018-06-20 00:11:12 358

原创 [动态规划] NYOJ16 矩形嵌套问题 (DAG的不固定起点的最长路)

题目有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a < c,b < d或者b < c,a < d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。思路1.将问题抽象为适合DP...

2018-06-18 23:20:15 330 2

原创 [动态规划] 洛谷P1216 数字三角形 (DP入门)

题目思路与代码一.先将问题往适合DP的方向抽象。1.将当前位置(i,j)看成一个状态,定义状态(i,j)的**指标函数**d(i,j)为从位置(i,j)除法能得到的最大和(包括(i,j))。 2.原问题的解:d(1,1)。 3.状态之间是如何转换的,即状态转移方程:d(i,j)=G(i,j)+max(d(i+1,j),d(i+1,j+1))d(i,j)=G(i,j)+max(d...

2018-06-18 11:45:15 295

原创 [二分] UVa1616 商队抢劫者(小数变分数)(小数精度问题)

题目思路主要思路还是不难想的,二分即可。 1.本题的解是呈单调性的,所以可以用二分查找解。需要注意的是,本题最后要求输出分数,就很麻烦,不能用传统的整数二分,而应使用以eps为基本单位的小数二分。意思也就是,当L和R仅差一个eps时,停止二分。 2.代码的eps,在很多题中常见,代表的是小数精度,理解为小数的“单位1”。 3.小数变分数:本题采用的是暴力枚举分母的方法,因为分...

2018-06-17 19:36:01 353

原创 [模拟] UVa177 折纸痕(点,线的绕点旋转)

题目思路本题的思路其实通过观察图形,很容易想出来的。即维护两个点s和rot,每次将整个图形绕rot点顺时针选择90度,并将rot点更新为旋转后的s点即可。关键在于横竖线的表达与数据结构问题。陈锋所采用的方法是:用start, end, vertical来描述一条线,随后对线的操作即为对start, end两个点的操作,以及极其重要的normalize函数。对于平面几何点绕点旋...

2018-06-17 09:23:13 556

原创 [复杂模拟] 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 360

原创 [枚举] UVa1618 弱键 (预处理)

题目给出k(最大5000)个不同整数组成的序列,判断是否存在4个整数Np,Nq,Nr,Ns(1<=p<q<r<s<=k)Np,Nq,Nr,Ns(1<=p<q<r<s<=k)N_p, N_q, N_r, N_s

2018-06-14 07:26:29 263

原创 [枚举] UVa1312 球场 (离散化)(技巧枚举典例)

题目 思路本题的关键就在于枚举的技巧和离散化。 1.离散化:对于一个最大的正方形,其必然至少有两条边上有点,因为没有的话还可以继续扩展。这样就直接将题目给的10000x10000的数据范围离散到了100个树。 2.技巧枚举:枚举正方形对边而不是起始点和边长。首先枚举上边和下边,最后枚举左边和右边。注意枚举左边和右边时,只需在已找到上边下边范围内,找黑点作为分隔符,随后分割成几部分...

2018-06-14 01:53:23 298

原创 [预处理] 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 305 1

原创 [滑动窗口] UVa11536 最小子序列 (二分滑窗长度)

题目思路这题就很easy了,了解一下二分滑窗长度的方法为主要。 1.根据题目给的公式,算出整个A[i]。 2.由于滑窗长度的解存在单调性,具体来说是若L = a时不成立,L=b时成立,那解必然在(a,b]中。所以用二分查找查找解,然后根据滑窗长度遍历一遍,此处的遍历有点像Shuffle那道题。代码#include <cstdio>#include <...

2018-06-13 18:21:36 625

原创 [贪心] UVa1617 笔记本 (推理)

题目思路这道题我的思路好像跟别人的不太一样。 首先,区间按终点排序,终点相同按起点。 随后对于每一个区间,执行如下操作: (1)查找A[i].a−1 A[i].b−1A[i].a−1 A[i].b−1A[i].a-1 ~ A[i].b-1范围内,有没有已经被占用的时间段。如果有,那么这个时间段后面紧接的时间段是否是空闲,是的话在此插入。(代码是A[i].a是因...

2018-06-13 00:39:40 244 1

原创 [贪心] UVa1153 顾客是上帝 (很巧妙的贪心)

题目有n(n≤800000)个工作,已知每个工作需要的时间qi和截止时间di(必须在此之前完 成),最多能完成多少个工作?工作只能串行完成。第一项任务开始的时间不早于时刻0。思路很强的贪心。 先把任务按截止时间排序,截止时间相同的话再按花费时间排,然后一个个做就行了。 这里需要注意,也是我没想到的是,对于一个遍历到它不能完成的任务,要检查之前“假定完成”的任务里,有没有耗费时间比这...

2018-06-12 01:37:37 407 1

原创 [暴力枚举] UVa10570 外星人聚会 (本题价值--)

题目N个外星人围成一桌坐下,有序的排列指N在N-1与N+1中间,现在给出一个序列,问至少交换几次可以得到有序的序列。5思路这道题就有点迷了。。 按这个数据范围,铁铁的是暴力枚举。但是不感觉紫书这一章的习题该考暴力枚举。 就说暴力枚举吧,总感觉枚举的方法也很有问题。AC代码是看别人的写的,每次选一个数作为序列起点,这样一个一个排下去。然后代码2是我之前的思路,每次选一个位置作为起点,...

2018-06-12 01:00:31 302

原创 [贪心] UVa1615 高速公路 (区间选点问题)

题目给定平面上n(n≤10510510^5)个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的 每个点,都有一个选出的点离它的欧几里德距离不超过D。思路这道题的思路可是我自己一个人想出来的哦。 以每个点为圆心,以D为半径画圆,会和x轴交于两点。所以能让这个点够得到的高速公路出口,就只会在这两点之间运动了。这不就变成区间选点了吗,而且本题只让统计选点数,更简单,一个循环三行代码...

2018-06-11 23:32:38 247

原创 [贪心] UVa1612 猜名次(浮点数精度问题)

题目###思路1.读题:本题的题目需要好好理解一下,刚开始给的是ID依次1~ n的得分,然后再给的是rank1~ rank n的ID,题目说的不是很清楚。 2.基本思路就是贪心。为了使后面选手的选择空间更大,rank靠前的选手因尽能力分高,这道题就仅此而已了。另外ID并列的情况也很容易分析,详情可以看代码。 3.本题要考虑浮点数精度的问题。比较明智的做法是,由于给的和输出的都是两位小数...

2018-06-11 01:19:24 328

原创 [贪心] 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 254 1

原创 [构造法] UVa1611 起重机 (冒泡排序式直接构造解)

题目思路主要思想是冒泡排序,逐步构造解。 (其实这类不求最优解,只限制次数的题,大多都是构造法) 当遍历到数字i时,此时1~i-1已经排好序,在长度为n-i+1的未排序区间中,记i前面的元素的个数为ci。 1.若ci <= (n-i+1)/2:   直接将i前面的未排序区间和从i开始长度为ci的未排序区间进行交换,即可把i交换到第i个位置。 2.若ci > (n-...

2018-06-10 00:45:21 361

原创 [构造法] UVa11925 Generating Permutations 生成排列 (逆向思维)

题目给出一个排列,问从排列1,2,…,n转换到所给排列需要的操作。 操作1:交换前两个元素。 操作2:将第一个元素放到最后。思路1.逆向思维转化问题:(因为(2)更便于处理) (1)由1,2,3,4 —>>> 4,2,3,1   所用操作:1.交换前两个元素。 2.将最前元素移到最后。 (2)由4,2,3,1 —>>> 1,2,3,4 ...

2018-06-10 00:28:53 205

原创 [数形结合] 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 934

原创 [字符串] UVa1610 Party Games 聚会游戏(简单模拟)

题目给出n个串(n为偶数); 要构造一个串,使n串中有一半小于等于它,另外一半大于它; 要求这个串长度尽量小,同时字典序小;思路细节较多使人烦躁的模拟题而已代码#include <cstdio>#include <cstdlib>#include <algorithm>#include <string>#inc...

2018-06-09 00:17:48 276

原创 [二分查找] UVa1607 Gates 与非门电路 (推理)

题目思路1._对于输入不同的x,电路最后的输出无非只有4种情况,常数0,常数1,x,非x。常数时,直接判断x=0,x=1输出是否相同。相同的话,x对电路无影响,直接输出全0或全1即可。与x有关时,即当x取0时,电路是一种结果。x取1时,电路是另一种结果。2._**通过x=0和x=1输出不同**,判定x所在位置。 设x=0时输出0,x=1时输出1 0 0 0 0 -&g...

2018-06-08 15:19:24 362

原创 [滑动窗口] UVa12174 Shuffle的播放记录(滑窗做预处理)(较复杂区间处理)

车上想细节,这种细节一大堆的题让人很烦躁#include <cstdio>#include <cstdlib>#include <algorithm>using namespace std;const int maxn = 100000 + 1000;int s, n, x[maxn*3], cnt[maxn],

2018-06-08 11:42:59 303

原创 [直接构造法] 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 571 4

原创 [分治] UVa1608 Non-boring sequences 不无聊序列 (分治与中途相遇法的结合)

题目思路1.主要思路:如果有一个只出现一次的元素A[p],那么所有包含此元素的所有连续子序列都满足不无聊。那么只需分治判断A[0~p-1]和A[p+1~n]是否不无聊即可。 2.分治方向的选择:(上界分析)从左往右找:最坏情况是唯一元素恰好在最右边。T(n)=T(n−1)+O(n)=O(n2)T(n)=T(n−1)+O(n)=O(n2)T(n) = T(n-1)+O(n) = ...

2018-06-08 09:08:05 473

原创 [扫描法] UVa1442 Cave 洞穴

题目 思路这道题的思路总体是扫描,但颇有一番推理的感觉,需要好好理解。 1.根据物理定律,每一段的水位高度h应满足不会高于当前天花板不会低于当前地板向左向右的射线,均不会碰到天花板。(因为水是平的)2.因此需要求每个h,h满足向左向右延伸都不会碰到天花板的最大值。 3.扫描法。对于每个地方,先求出向左延伸不会碰到天花板的高度h1,再求出向右延伸不会碰到天花板的...

2018-06-07 23:34:45 212

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除