- 博客(59)
- 收藏
- 关注
转载 SPOJ GSS1 && GSS3 (无更新/更新单点,并询问区间最大连续和)
http://www.spoj.com/problems/GSS1/题意:无更新询问区间最大连续和。做法:线段树每个节点维护sum[rt],maxsum[rt],lsum[rt],rsum[rt],分别区间和、区间最大和、区间左端最大和和区间右端最大和。 查询时按从左到右扫,维护ans为最大连续和,rans为到该段的右端最大连续和,扫到每一段时有: ans = max...
2013-09-06 21:39:00
166
转载 SPOJ 3267 求区间不同数的个数
题意:给定一个数列,每次查询一个区间不同数的个数。做法:离线+BIT维护。将查询按右端点排序。从左到右扫,如果该数之前出现过,则将之前出现过的位置相应删除;当前位置则添加1。这样做就保证每次扫描到的某一位置,以该位置为右端点的区间都相应地确定了。 1 /* 2 *Author: Zhaofa Fang 3 *Created time: 2013-0...
2013-08-26 00:13:00
195
转载 poj 3680 Intervals(费用流)
http://poj.org/problem?id=3680巧妙的构图。题目:给定N个区间(ai,bi)权值wi,求最大权和且每个点最多覆盖K次。构图:将区间端点离散化,将第i个点连第i+1个点花费为0,容量为INF,即addedge(i,i+1,0,INF)(可用来跳过一些区间); 再处理N个区间(ai,bi),addedge(ai,bi,-wi,1); 最...
2013-07-19 15:55:00
152
转载 poj 1149 PIGS(最大流经典构图)
题目描述:迈克在一个养猪场工作,养猪场里有M 个猪圈,每个猪圈都上了锁。由于迈克没有钥匙,所以他不能打开任何一个猪圈。要买猪的顾客一个接一个来到养猪场,每个顾客有一些猪圈的钥匙,而且他们要买一定数量的猪。某一天,所有要到养猪场买猪的顾客,他们的信息是要提前让迈克知道的。这些信息包括:顾客所拥有的钥匙(详细到有几个猪圈的钥匙、有哪几个猪圈的钥匙)、要购买的数量。这样对迈克很有好处,他可以安...
2013-07-17 16:26:00
177
转载 UVa 10330 - Power Transmission(最大流--拆点)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1271题目:普通的网络流模型加多了一个每个节点的流量限制。刚开始的时候是直接找增广路,顺便更新节点的容量,但是证明不了其正确性,WA了,大概这种做法是错的。正解:...
2013-07-16 20:49:00
185
转载 SRM 584 div2
早早地水完了三道题,pt1000用的是dfs,开始做的时候误认为复杂度最多就O(2^25),结果被一组O(2*3^16)的数据接近1e8给cha了。继续努力。pt250:求两个串的前缀组成的不同串数目。set搞定。 1 /* 2 *Author: Zhaofa Fang 3 *Created time: 2013-07-10-18.54 ...
2013-07-11 12:42:00
195
转载 hdu 3518 Boring counting(后缀数组+height分组)
题意:求重复但不重叠的子串数。解题思路:height分组。枚举长度L,将height数组进行分组,使得每一组的height都大于L,若有一组的最大的sa值和最小的sa值之差大于L,则说明该组内存在一个符合条件的子串。View Code 1 /* 2 *Author: Zhaofa Fang 3 *Created time: 2013-05-...
2013-05-06 20:22:00
132
转载 Codeforces Round #181 (Div. 2) C. Beautiful Numbers(组合数取模+乘法逆元)
http://codeforces.com/contest/300/problem/C题意:一个n位的数只包含a,b两个数字并且每一位数字的和也只包含这两个数字,求这样的数有多少?做法:枚举a出现的次数为x,则b为n-x。如果sum = ax+b(n-x)合法,则这种情况的数目为C(n,x).C(n,x) = n! / ( (n-x)! * x! ) (mod p) = ...
2013-04-27 20:45:00
169
转载 hdu 2610 && hdu 2611(bfs)
hdu 2610题意:从数组中找出不超过P个序列,每个序列为不下降序列,输出按1)序列长度;2)每个数出现的先后做法:bfs,题目要求完全符合bfs的性质。判重很关键,我用了比较水的set来判重。(用set<string>来判重wa,改用set<vector<int> >ac而且比前者快。)343MS 1 /* 2 *Author...
2013-04-22 21:57:00
159
转载 Codeforces Round #180 (Div. 2) D. Fish Weight
http://www.codeforces.com/contest/298/problem/D题意:Alice有n条鱼和Bob有m条鱼,鱼有k个品种,重量按标号不下降的递增,问A的总重量能否大于B的总重量。做法:如果A中的每一条鱼在B中都能找到一条鱼大于等于其重量,则A的总重量不可能大于B。View Code 1 /* 2 *Author: Zha...
2013-04-22 12:42:00
131
转载 spoj 705 求不同子串的个数(后缀数组)
http://www.spoj.com/problems/SUBST1/题意:给定一个字符串,求不相同的子串的个数。解题思路:对于一个后缀sa[k],它产生了n-sa[k]个前缀,减去height[k]个相同的前缀(与前一个比较),则产生了n-sa[k]-height[k]个子串。累加后即结果。View Code 1 /* 2 *Author: Z...
2013-04-21 21:59:00
174
转载 poj 1743 Musical Theme 求不可重叠最长重复子串(二分答案+height分组)
题目可转化为一个经典问题:给定一个字符串,求最长重复子串,这两个子串不能重叠。解题思路:二分答案。这就转化成判定性的问题。对于每一个答案需要判定该答案是否合法。把height数组分成若干组使得每一组的height都不小于答案k,如果有一组的后缀的sa值的最大值和最小值之差大于k(保证了两个子串不能重复),则答案k成立。倍增算法 1 /* 2 *Author: ...
2013-04-19 23:10:00
157
转载 LA 3942 Remember the Word(Trie树 + dp)
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1943题意:给出一个由S个不同单词组成的字典和一个长字符串。把这个字符串分解成若干个单词的连接(单词可重复使用),有多少种方法?解题思路:用Trie存...
2013-04-03 13:15:00
267
转载 hdu 2167 Pebbles(状态压缩DP)
入门级状态压缩dp题。题意:从方格中取一些数,要求所取位置不相邻(包括对角线相邻),求最大的和。做法:把每行的状态压缩成二进制数,设状态dp[i][p]为第i行取集合p,容易得出dp[i][p] = max{dp[i-1][q] + cnt[i][p]| 集合p,q可以共存},cnt[i][p]为第i行为集合p时所取得数的和。View Code 1 /* 2...
2013-03-31 11:57:00
151
转载 poj 1185 & hdu 4539(状态压缩DP)
这两道题如出一辙,只是判断有效状态有一点小差异。每一行的状态只与前面两行的状态有关,每行可以压缩为二进制的集合,设状态dp[i][j][k]为第i行为集合j,第i-1行为集合k,得出状态方程dp[i][j][k] = max{dp[i-1][k][r]+cnt[j] | 状态i,j,k要能够共存}(cnt[j]为j在二进制下的1的个数,即士兵数)。第一维可以压缩为2,即两种状态...
2013-03-30 23:13:00
114
转载 hdu 4517 小小明系列故事——游戏的烦恼(统计类题目)
Problem Description 小小明最近在玩一款游戏,它由n*m大小的矩阵构成,矩阵上会随机产生一些黑色的点,这些点它们可能会连在一起也可能会分开,这些点的个数没有限制,但是每个1*1方格中最多只可能有一个黑点产生。游戏要求玩家以最短的时间用x*y的小矩阵覆盖这个大矩阵,覆盖的要求有以下2点: 1. x*y大小的小矩阵内必须有x*y个黑点。 2. 多个小矩阵可以重叠,...
2013-03-23 22:37:00
192
转载 hdu 4512 吉哥系列故事——完美队形I(最长公共上升子序列)
Problem Description 吉哥这几天对队形比较感兴趣。 有一天,有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则称之为完美队形: 1、挑出的人保持他们在原队形的相对顺序不变; 2、左右对称,假设有m个人形成新的队形,则第1个人和第m个人身高相同...
2013-03-23 12:24:00
142
转载 Codeforces Round #174 DIV2
收获了8个hack,本来排名50+,结果C题没有用long long ,错过了一次绝佳的变紫机会...A题:简单题。快速幂水过。View CodeB题:简单题。没看清题目WA了一次。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> ...
2013-03-18 10:55:00
137
转载 ural 1018 Binary Apple Tree(树dp)
http://acm.timus.ru/problem.aspx?space=1&num=1018题意:有一棵苹果树,苹果树的是一棵二叉树,共N个节点,树节点编号为1~N,编号为1的节点为树根,边可理解为树的分枝,每个分支都长着若干个苹果,现在要要求减去若干个分支,保留M个分支,要求这M个分支的苹果数量最多。树dp跟一般的dp的解决方案一样也是三个步骤:1、确定状态;...
2013-03-12 19:38:00
146
转载 hdu 3756 Dome of Circus(三分)
题意:求能将所有点覆盖的最小体积的圆锥。体积变化为凹形,故可以三分半径r,再枚举各个点找最大的高h。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstr...
2013-02-27 12:31:00
140
转载 hdu 2289 cup(二分搜索)
注意:当杯子为圆柱时也要二分,不能直接算。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #include <iostre...
2013-02-20 20:27:00
134
转载 hdu 3732 Ahui Writes Word(多重背包)
因为 0 ≤ Vi , Ci ≤ 10 , 范围很小,故可以转化为多重背包+二进制优化来解决。分解为系数为1,2,4,8...Mi-2^k+1的物品再做01背包。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cs...
2013-02-19 17:36:00
140
转载 hdu 3033 I love sneakers!(01背包变种)
题意:有n个品牌,每个品牌至少买一件。01背包加上一维,设计状态dp[k][i]表示前k种花费i所取得的最大值,状态可由前k-1种和当前品牌取得,注意初始化和方程的位置(无后效性)。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #incl...
2013-02-19 13:13:00
91
转载 hdu 3496 Watch The Movie(二维费用背包)
二维费用背包问题有两个限制条件:电影时长和看电影的部数。需要注意一下初始化dp[i][0] = 0,其余未知,因为看电影是一部一部来,所以当前dp值只能衔接前一部的dp值。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include &...
2013-02-18 20:40:00
152
转载 hdu 1712 ACboy needs your help(分组背包)
分组背包一水~View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #include <iostream> 9 #in...
2013-02-18 19:34:00
81
转载 hdu 1133 Buy the Ticket(大数运算)
ans = (m+n)!*(m-n+1)/(m+1).大数乘小数,大数除小数。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8...
2012-12-11 18:25:00
122
转载 poj 1679 The Unique MST(次小生成树)
题意:判断最小生成树是否唯一。分析:只需要判断最小生成树与次小生成树的总权值是否相等。判断次小生成树的方法:kruskal O(n^3):先求一次最小生成树,然后枚举去掉生成树中的边,再求n-1次最小生成树,去最小的一棵。prim O(n^2):先求一次最小生成树,记录树上的边,并且保存每个环中的最大边,然后用一次DP枚举掉树上的边,更新生成树的权和,取最小值。kru...
2012-12-09 17:08:00
100
转载 hdu 1130 How Many Trees?(卡特兰数)
卡特兰数高精度。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #include <iostream> 9 #i...
2012-11-28 19:42:00
125
转载 hdu 1063 Exponentiation(高精度幂)
poj这题数据很水很容易过,然而hdu的这题可能是因为case太多O(125*125*n)的复杂度TLE,最后用了快速幂的方法优化到O(125*125*logn)过了。140MS。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 ...
2012-11-28 14:02:00
143
转载 zoj 3031 Robotruck(dp + 单调队列)
题意:有n个垃圾,机器人要按照编号从小到大捡但手中的垃圾不得超过C,求出机器人行走的最短总路程。做法:设dp[i]为捡第i个垃圾的最短距离,dist[i]为按顺序的总长,dis_ori[i]为i到原点的距离。不难得出:dp[i] = min{dp[j] + dis_ori[j+1] + distance[j+1,i] + dis_ori[i] } ; w(j+1...
2012-11-18 11:16:00
139
转载 Codeforces Round #149 (Div. 2)
http://codeforces.com/contest/242C题:给出一些线段,起点和终点,只能在线段上走,线段范围上限为1e9,但是线段的总长不超过1e5.做法:bfs+mapView Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #...
2012-11-13 13:25:00
91
转载 UVA 10534 Wavio Sequence(LIS)
题意:给定一个长度为n的整数序列,求一个最长子序列,使得该序列的长度为2*k+1,前k+1个数严格递增,后k+1个数严格递减。分析:用O(nlogn)分别求出递增序列和递减序列,再O(n)求在某个位置符合条件的序列长度。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <c...
2012-11-10 15:11:00
108
转载 UVA 11584 Partitioning by Palindromes
题意:把字符串划分成尽量少的回文串。dp[i] = max{dp[j-1] + 1 | str[j....i]为回文串}。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #inclu...
2012-11-08 22:58:00
75
转载 UVA 10635 Prince and Princess(LIS)
又是训练指南上的一道经典题~~ http://uva.onlinejudge.org/external/106/10635.html题意:有两个长度分别为p+1和q+1的序列,每个序列各个元素互不相同,且都是1~n^2的整数。求俩序列的LCS。分析:LCS的O(pq)复杂度显然太慢。注意到“每个序列各个元素互不相同,且都是1~n^2的整数”,所以有个巧妙的转换,把A中的元素...
2012-11-06 20:47:00
146
转载 UVA 10881 - Piotr's Ants
训练指南上的一道题目,感觉还不错。参考该书做如下总结:题意:一根长度为L的木棍上有n只蚂蚁,每只蚂蚁要么朝左要么朝右爬,求T秒后每只蚂蚁的位置和状态。分析:1)蚂蚁相撞“掉头”等价于“对穿而过”; 2)每只蚂蚁最后位置固定; 3)初始时按位置排序后,第i只蚂蚁不可能比第i+1只蚂蚁的距离远。View Code 1 /* 2 Autho...
2012-10-29 20:06:00
109
转载 hdu 1175 连连看(dfs+剪枝)
一些细节没处理好,wa了很多次。剪枝不强,跑了6000+ms。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #includ...
2012-10-28 22:25:00
64
转载 hdu 2955 Robberies(01背包)
01背包的变形,因为概率P为浮点数所以不能作为背包容量,只能找能抢的最大金额作为容量。刚开始还傻傻地想求最小被抓的概率,但是细想被抓只有一次,所以只能求最大逃跑概率。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cs...
2012-10-25 21:44:00
108
转载 hdu 1069 Monkey and Banana
题意:给出长方体的长宽高,问能叠多高(上面一个的底的长宽要严格大于下一个)。分析:按底面积排序,设dp[i]为第i个能达到的最大高度,则dp[i] = max{dp[j]} + h[i] ; (j<i)View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio&...
2012-10-25 20:17:00
73
转载 hdu 4031 Attack(树状数组)
刚开始看错题意,以为防御全部都要缓冲,wa了几次,重新看题才知道是部分缓冲。ans = 总的攻击次数 - 防御次数View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include &...
2012-10-23 21:20:00
154
转载 Codeforces Round #144 (Div. 2) C. Cycles
http://codeforces.com/contest/233/problem/C题意:求一个具有k个三元环的无向图。分析:先一个i个节点的无向完全图,其中C(i,3)<=k,剩下k-C(i,3)个三元环未构成,再加j条边(C(j,2)<=未构成的环)直到满足条件。View Code 1 /* 2 Author:Zhaofa Fang 3 L...
2012-10-15 13:25:00
87
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅