自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

晚风中的自由

漫无目的地徜徉在晚风中 就像穿越神奇的河回到过去

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

转载 STL string常用函数

string类的构造函数: string(const char *s);    //用c字符串s初始化 string(int n,char c);     //用n个字符c初始化 此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常 stri

2015-05-17 18:16:52 336

原创 HDU 2480 - Steal the Treasure(贪心+并查集)

题意:有 n 个城市, m 条边,每条边连接两个城市。x y d w 表示,x y 之间有一条边,边上有财富值 w ,d 为 1 表示有向边, d 为 0 表示 无向边。小偷集团要窃取这些财富值,在每个 城市都有一个小偷,经过相邻的边时就会得到该条边对应的财富值。每条边只可以走一次。问最后可以得到的最大值。 思路:贪心,按边权从大到小排序。对于有向边,只能选起点,那无向边呢,两个点都是可以的,而且怎么选择对后面是有影响的。于是想到先把这两个点标记为待确定点,根绝后面的选择再确定这两个点。注意到一个点可能是

2015-05-13 23:13:57 523

原创 UVA 4394 - String painter(字符串区间DP)

题意:给定两个长度相等的字符串,记为 A, B, 均只包含小写字母。每次可以把一个连续字串 “刷” 成相同的一个字母,问至少需要几次才能够把 A 变为 B。 思路: 假设一个空串要刷成目标串的极端情况(题意保证不存在空串,可以假设为所有字母均与目标串不同)。 用 dp[ i ][ j ] 表示把 A 串的 i-j 区间刷成目标串 B 的 i-j 所需要的最少步数,首先初始化所有的 dp[ i ][ i ] 为 1 。 dp[ i ][ j ] = dp[ i+1 ][ j ] + (strB[ i

2015-05-13 21:17:01 678

原创 UVALive 4015 - Caves(树形DP)

题意:一棵n个节点的有根树,树的边有正整数权,表示两个节点之间的距离,你的任务是回答这样的询问,从根节点出发,走不超过x单位的距离,最多能走多少个节点,节点经过多次算一个,对于每次的询问输出:经过节点数最大的值。 注意题目给出的 i, j,d,其中 j 是 i 的父节点。 思路:树形DP,设 d[ i ][ j ][ k ] 表示以第i个节点为根节点的子树机器人访问j个节点走的最少的路程,k==0表示访问完后又回到i节点,k==1 表示访问完后不回来, 则状态转移方程为: d[x][j+k][0]

2015-05-13 00:15:59 1320

原创 LA 4945 Free Goodies(贪心)

题意:n个糖果,两个人 Petra,Jan,每个糖果对于这两个人都有一定的val值,Petra每次选对于自己val值最大的那个,如果一样,就选Jan的val值小的,Jan想让自己选的糖果的val值之和最大,如果有多种路径,那么就选使Petra最后的val最大的那种(真是好基友,好丽友。。 = =),告诉你先手,轮着来。问你最后他们两个的分别得val值之和。 思路:贪心。先按照Petra的顺序两人逐个选取,就会得到两组,一组是Petra的,一组是Jan的,然后再倒着来,对于每个Jan选取的糖果,对于当前点再

2015-05-12 01:10:09 936

原创 UVA 1347(POJ 2677)Tour(双调欧几里得旅行商问题)

题意:典型的动态规划例题。又叫做双调欧几里得旅行商问题。算法导论里面的题目。 思路: dp[i][j] 表示从 i 到 1,再从1到j的距离。在这个路径上,点 1 到 Pmax(i,j) 点之间的所有点有且仅有经过一次。 dp[i][j] = dp[i-1][j] + dis(i,i-1); dp[i][i-1] = min (dp[i][i-1], dp[i-1][j] + dis(i, j));

2015-05-10 17:04:09 878

原创 POJ 3114 - Countries in War(强连通分量+缩点+拓扑排序+DAG最短路)

题意:间谍在战争时期想要传递一份邮件回国,邮件可以在各个邮局之间传播,但传递是单向的,并且耗时,如果两个邮局在一个国家的话,那么邮件在他们之间的传递不用耗时,判断两个邮局是否在一个国家的标准是两个邮局可以互相传递邮件。给出两个邮局,输出最短的到达时间。 思路:强连通分量+缩点+拓扑排序+DAG最短路。

2015-05-09 22:22:39 635

原创 POJ 1236 - Network of Schools(强连通分量)

题意:有n个学校,学校之间可以传递信息,为单向传递。 问题一:至少要向几个学校传递原始信息,才能保证所有学校都能收到信息。 问题二:至少要添加多少组关系(每组关系类型如右:a 可以 向 b 传递信息),才能保证 给任意一个学校原始信息后,其他所有学校都能收到信息。 思路:这道题其实就是一个有n个顶点的有向图,先用 Tarjan 算法缩点 , 然后分别统计出 入度为0 和 出度为0 的强连通分量个数 num1 和 num2,那么, 问题一的答案就是 num1 , 问题二的答案就是 max(num1 , nu

2015-05-09 22:12:30 488

原创 UVa 1291- Dance Dance Revolution(DP)

题意: 怀特在跳舞,初始时间左右脚都在 0 位置。给出的一系列数字由 1, 2, 3, 4组成(不包含0).读取到 0 表示该例子结束,0 不做处理。 每次你必须选择一只脚移动到对应数字方向的各格子上。(x, y)表示左右脚分别在什么位置。 初始状态(0,0), 要移到 1, 可以选择左脚或者右脚移上去,对应的状态为(1, 0), (0,1) 移到相临边的格子需要 2 单元的体力,移到对角线的格子需要 3 体力。若原地不动,1 体力。移到前方的第二个格子,需要2 体力。除了初始位置,左右脚都在同一格子

2015-05-09 21:30:46 587

原创 UVa 2038 - Strategic game(二分图最小顶点覆盖 or 树形DP)

题意:给定一棵树,选择尽量少的点,使得每个没有选中的结点至少和一个已经选中的结点相邻。输出最少需要选择的节点数。 思路:经典的二分图最小顶点覆盖, 也是经典的树形 DP 。 最小顶点覆盖 == 最大匹配(双向图)/2数据较大,用邻接表。不然会超时。

2015-05-08 21:12:06 722

转载 UVa 10817 - Headmaster's Headache ( 状态压缩dp)

Description Problem D: Headmaster's Headache Time limit: 2 seconds The headmaster of Spring Field School is considering employing some new teachers for certain subjects.

2015-05-08 20:31:03 520

原创 UVa 10564 - Paths through the Hourglass(DP)

题意:有一个沙漏,如下图所示。你可以从第一行的任意一格开始往下走,向左下方或者右下方走,但不能走出沙漏。你的目标是让沿途所有经过的整数之和恰好为一个整数 s ,求出符合上述条件的路径总数,以及打印一条路径。如果有多条路径,选择起点编号最小的,每一行的格子编号从 0 开始。如果仍然有多个解,移动序列(L代表左移,R代表右移)的字典序应最小。如果不存在可行的路径,输出 0,并且在 0 的下面输出一行空行。 思路:看了一下别人的做法,坐标构造方面可谓大神自由妙计啊。把纵坐标构造成以下形式,用 str 数组保存

2015-05-07 20:45:31 646

原创 二十岁出头的时候上,你一无所有,你拥有一切

二十岁出头的时候上,你一无所有,你拥有一切

2015-05-07 17:50:02 712

原创 UVa 1366 - Martian Mining (DP)

题意:在一个 n x m 的区域中,每个格子区域中,有 A, B 两种矿物,A 矿物只能够从右到左运输,B矿物只能够从下到上运输,运输的管子不能拐弯或者间断。要求收集到的 A,B 矿总量尽量大。 思路:如果在 [ i,j ] 格子选择 A 矿, 那么第 i 行的 [ 1,j ] 格子都要选择 A 矿。因为A 矿物只能够从右到左运输。 如果在 [ i,j ] 格子选择 B 矿, 那么第 j 列的 [ 1,i ] 格子都要选择 B 矿。因为B矿物只能够从下到上运输。 定义 A[i][

2015-05-07 16:16:39 652

原创 UVa 1456 - Cellular Network(概率DP)

题意:手机在蜂窝中的定位问题是一个基本的问题。假设蜂窝网络已经知道手机处于 c1, c2, c3,....cn 这些都区域中的一个,最简单的方法就是同时在这些区域寻找手机。但这样做很浪费时间,由于蜂窝网络可以知道手机在这不同区域的概率,因此折中的方法就是把这些区域分成 w 组, 然后依次访问。比如,已经知道手机可能位于 5 个区域中,概率分别为 0.3, 0.05, 0.1, 0.3, 0.25, w = 2, 其中一种方法是先同时访问 {c1,c2, c3}, 再同时访问 {c 4,c5},访问区域的数

2015-05-06 16:41:35 855

原创 UVa 11552 - Fewest Flops(DP,状态设计)

题意:输入一个正整数 k 和一个字符串 S, 字符串的长度保证为 k 的整数倍。把 S 的字符串从左至右的顺序每 k 个分成一组,每组里面的字符串可以任意重排,但组与组间的顺序不能改变。你的任务是使重排后的字符串包含的 “块” 尽量的少,每个 “块” 为连续的相同的字母。比如 uuvuwwuv 可以分为两组:uuvu 和 wwuv,第一组重排为 uuuv , 第二组重排为 vuww,连接起来就是 uuuvvuww, 包含4个 “块”。 思路: dp[i][j]: 第 i 块以第 j 位结尾时的最小块

2015-05-05 21:12:06 517

原创 UVa11795 Mega Man's Mission(状态压缩DP)

题意: 洛克人最初只有一种武器 “Mega Buster”(这种武器可以消灭特定的一些机器人),你需要按照一定的顺序消灭 n 个其他机器人。每消灭一个机器人你将会得到他的武器(也可能没有得到武器),而这些武器可以消灭特定的机器人。你的任务是计算出消灭所有机器人的顺序总数。注意:一个机器人的武器可能可以消灭自己,但这对最终答案没有影响,因为必须先消灭这个机器人才能够得到他的武器。 思路:n 的范围为 [1,16],可以用状态压缩DP来做,用二进制保存状态。时间复杂度为 O(n*2^n) 。首先用 weapo

2015-05-04 17:06:47 702

原创 HDU4072Working at the Restaurant(模拟)

题意:当读到 "DROP m" 从侍者手中接过盘子 m 个盘子放在 2 号堆。当读到 "TAKE m" ,就要从 1 号堆拿出 m 个盘子给洗碗机。题意要求拿出的盘子的顺序和进来的顺序一致。这就要用到 "MOVE 1->2 t" 操作,从 1 号堆转移 t 个盘子到 2 号堆。 注意每次取盘子都是从最顶端开始拿。每两个例子间空一行。思路:模拟。每次 1 号堆为空都要把 2 号堆的所有盘子移到 1 号堆,这样子才能够保证顺序不会出错。

2015-05-03 20:40:13 742

原创 HDU4071Trick or Treat(三分查找)

题意:在一个直角坐标系中,给出n个点。在 x 轴上选一个点,使得到那 n 个点的最长距离最短。思路:用三分查找枚举即可。控制精度。

2015-05-02 18:18:07 764

空空如也

空空如也

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

TA关注的人

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