02 2016 档案
摘要:题意:从出发点到目的地往返一次,道路i连接着ai号和bi号,长度为ci。同一条路只能走一次,求最小路径长度。分析:如果没有往返,那么就是简单的最短路问题。如果规定严格从左到右,那么就是简单的双调旅行商问题。对于本题,同样还是将往返看成是从出发地开始的两条没有公共边的路径,便可以转化...
阅读全文
摘要:题意:N个模块可以在A,B两个核上运行,分别需要A[i]和B[i],模块之间需要传递数据,若两个模块在同一核上,则不需要花费,否则需要花费w[i]。问最少需要花费多少?分析:用最小的费用将两个对象分成两个集合的问题,常常可以转换为最小割问题。 按照N个模块在哪个核上运行分成两个集合...
阅读全文
摘要:题意:N个模块可以在A,B两个核上运行,分别需要A[i]和B[i],模块之间需要传递数据,若两个模块在同一核上,则不需要花费,否则需要花费w[i]。问最少需要花费多少?分析:用最小的费用将两个对象分成两个集合的问题,常常可以转换为最小割问题。 按照N个模块在哪个核上运行分成两个集合...
阅读全文
摘要:题意:FJ准备了F种食物和D种饮料,每头牛都有喜欢的食物和饮料,并且每头牛都只能分配一种食物和饮料。问如何分配使得同时得到喜欢的食物和饮料的牛数量最多。分析:首先想到将牛与其对应的食物和饮料匹配起来,即在食物、饮料与牛之间连一条边,再在s和所有食物之间、t和所有饮料之间连一条边。这...
阅读全文
摘要:题意:FJ准备了F种食物和D种饮料,每头牛都有喜欢的食物和饮料,并且每头牛都只能分配一种食物和饮料。问如何分配使得同时得到喜欢的食物和饮料的牛数量最多。分析:首先想到将牛与其对应的食物和饮料匹配起来,即在食物、饮料与牛之间连一条边,再在s和所有食物之间、t和所有饮料之间连一条边。这...
阅读全文
摘要:题意:N*N网格中有小行星,光束能将一整行或者一整列的行星消灭,问消灭所有行星至少需要多少光束?分析:最小顶点覆盖问题,将每个小行星看成边,左右顶点为横纵坐标,可以转化为二分图,利用二分图中最小顶点覆盖等于最大二分匹配的性质,求出最大二分匹配(匈牙利算法)即可。代码:#includ...
阅读全文
摘要:题意:求在[a,b](a,b不含前导0)中的d−magic数中有多少个是m的倍数。分析:计数dp Let’s call a number d-magic if digit d appears in decimal presentation of the number on eve...
阅读全文
摘要:题意:有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k。分析:dp+矩阵快速幂。 假如现在的数是m,模x余数是n,那么再从下一个block中选一...
阅读全文
摘要:题意:用1*2和2*1的方块将给定长宽的矩形填满。问有多少种放法,对称的算两种。分析:状态压缩dp 首先用0表示前一行没有竖块占用这个位置,而1表示该位置和他上方的位置放了一个竖块,从而压缩状态。接下来一行一行的看,每一行都只受上一行的影响,同时影响着下一行的状态,那么如何将现在的...
阅读全文
摘要:题意:一系列m个1~n区间,每个区间固定对某个子区间进行排序,顺序选择若干区间,使最终覆盖所有区间。分析: computes the length of the shortest subsequence of the initial sequence of sorters sti...
阅读全文
摘要:题意:求n*n矩阵的幂和分析:逐个加起来时间复杂度太高,通过在矩阵中套个矩阵和,再利用矩阵快速幂,最后时间复杂度为O(n3logn)代码:#include#include#includeusing namespace std;typedef long long ll;const i...
阅读全文
摘要:题意:用红绿蓝黄四种颜色对一序列n个方块涂色,求出绿和红色方块数同时为偶数的染色方案数。mod=10007分析:dp+矩阵快速幂 首先明确有三种状态:红和绿均为偶数红和绿只有一个为奇数红和绿均为奇数设前三种方案数分别为ai,bi,ci,则可以得到以下递推式: ai+1=2∗ai+b...
阅读全文
摘要:题意:用红绿蓝黄四种颜色对一序列n个方块涂色,求出绿和红色方块数同时为偶数的染色方案数。mod=10007分析:dp+矩阵快速幂 首先明确有三种状态:红和绿均为偶数红和绿只有一个为奇数红和绿均为奇数设前三种方案数分别为ai,bi,ci,则可以得到以下递推式: ai+1=2∗ai+b...
阅读全文
摘要:题意:一共有m个城市,城市之间有双向路连接,一个人有n张马车票,一张马车票只能走一条路,走一条路的时间为这条路的长度除以使用的马车票上规定的马车数,问这个人从a出发到b最少使用时间。分析:状态压缩dp,用dp[i][j]表示到达j城市的最小时间,其中i为剩余车票的集合。集合i使用状...
阅读全文
摘要:题意:一共有m个城市,城市之间有双向路连接,一个人有n张马车票,一张马车票只能走一条路,走一条路的时间为这条路的长度除以使用的马车票上规定的马车数,问这个人从a出发到b最少使用时间。分析:状态压缩dp,用dp[i][j]表示到达j城市的最小时间,其中i为剩余车票的集合。集合i使用状...
阅读全文
摘要:POJ 2104为例(主席树入门题)思想:可持久化线段树,也叫作函数式线段树,也叫主席树(高大上)。 可持久化数据结构(Persistent data structure):利用函数式编程的思想使其支持询问历史版本、同时充分利用它们之间的共同数据来减少时间和空间消耗。 主席树...
阅读全文
摘要:POJ 2104为例思想:《挑战程序设计竞赛》中介绍的方法。 分桶法:把一排物品或者平面分成桶,每个桶分别维护自己内部的信息,已达到高效计算的目的。设一共有n个数,每b个分到一个桶里,并对桶内元素进行排序。给定区间,求小于x的数的个数对于完全包含在区间内的桶,直接二分查找满足条件...
阅读全文
摘要:POJ 2104为例思想:利用归并排序的思想:建树过程和归并排序类似,每个数列都是子树序列的合并与排序。查询过程,如果所查询区间完全包含在当前区间中,则直接返回当前区间内小于所求数的元素个数,否则递归的对子树进行求解并相加。使用STL中的merge对子序列进行合并及排序。时间复杂度...
阅读全文
摘要:POJ 2104为例【经典划分树问题】思想:利用快速排序思想,建树时将区间内的值与区间中值相比,小于则放入左子树,大于则放入右子树,如果相等则放入左子树直到放满区间一半。查询时,在建树过程中利用leftsum[p][i]数组保存有多少个数划分到第p层,第i个位置的左边。每次查询计算...
阅读全文
摘要:完全不知道该怎么用,看书稍微懂了点。题意:给定序列及操作,求区间和。分析:树状数组可以高效的求出连续一段元素之和或更新单个元素的值。但是无法高效的给某一个区间的所有元素同时加个值。 不能直接用树状数组求,就处理一下。用两个树状数组维护两个数据,一个维护前i项和,一个维护增加的值。设...
阅读全文
摘要:题意:给定序列及操作,求区间和。分析:线段树,每个节点维护两个数据:该区间每个元素所加的值该区间元素和可以分为“路过”该区间和“完全覆盖”该区间考虑。代码:#include#include#includeusing namespace std;typedef long long l...
阅读全文
摘要:题意:给定每个兵营的最大容量,以及第i到第j个兵营至少有多少个士兵,问所有兵营一共至少有多少个士兵?分析:差分约束系统,注意第i到第j至少有k个第i到第j最多有最大容量之和个每个兵营至少有0个每个兵营最多有最大容量个代码:#include#include#include#inclu...
阅读全文
摘要:题意:给定每个兵营的最大容量,以及第i到第j个兵营至少有多少个士兵,问所有兵营一共至少有多少个士兵?分析:差分约束系统,注意第i到第j至少有k个第i到第j最多有最大容量之和个每个兵营至少有0个每个兵营最多有最大容量个代码:#include#include#include#inclu...
阅读全文
摘要:大早上水一发=。=题意:n头牛按编号顺序站成一列,给定n头牛之间的位置关系,求出第n头牛和第一头牛之间的最大距离。分析:差分约束系统,这题不等式关系还是挺好找的。注意因为按照顺序排列,所以有d[i+1]>=d[i]代码:#include#includeusing namespace...
阅读全文
摘要:大早上水一发=。=题意:n头牛按编号顺序站成一列,给定n头牛之间的位置关系,求出第n头牛和第一头牛之间的最大距离。分析:差分约束系统,这题不等式关系还是挺好找的。注意因为按照顺序排列,所以有d[i+1]>=d[i]代码:#include#includeusing namespace...
阅读全文
摘要:题意:若干球最初从高到低排列,依次落下。 球与地面碰撞,速度不变方向相反,球之间碰撞, 交换速度和方向。问某一时刻各个球的高度。分析:把球之间的碰撞看成是擦肩而过,但是由于半径的存在,最后每个球的高度都要加上2∗i∗r,还有注意半径的单位是cm代码:#include#include...
阅读全文
摘要:题意:无向图,求单源次短路,每条边可以走多次。分析:对于每个点记录最短路和次短路,次短路可以是由最短路+边或者是次短路+边更新而来。在更新每个点的最短路时,相应更新次短路,如果最短路更新了,就令次短路等于原来的最短路,如果没有,就看能否直接更新次短路。代码:#include#inc...
阅读全文
摘要:题意:征用一些男生和女生,每个应都要给10000元,但是如果某个男生和女生之间有关系,则给的钱数为10000减去相应的亲密度,征集一个士兵时一次关系只能使用一次。分析:kruskal求最小生成树,注意男生和女生用偏移量处理。代码:#include#include#includeus...
阅读全文
摘要:题意:又是农夫和牛的故事。。。有m*n个黑白块,黑块的背面是白块,白块背面是黑块,一头牛踩一块,则这个块的上下左右的方块都会转动,问至少踩多少块,才会使所有块都变成白色?分析:还是开关问题,同样是一个块的转动会影响其他块的状态,但这次不是简单的线性排列,也不能只踩黑块。首先根据字典...
阅读全文
摘要:题意:A,B,C,D四组数中各取一个数,使这四个数相加为0,问有多少组取法?分析:四个数列有n4种取法,规模较大,但是可以将他们分成AB,CD两组,分别枚举,最后再合并。代码:#include#include#includeusing namespace std;typedef l...
阅读全文
摘要:题意:N头牛站成一条线,分别朝向前后两个方向,机器可以使连续K头牛同时改变方向,要求所有牛最终朝向前方,问机器操作次数的最小值及此时的最小K值。分析:第一眼看感觉是二分搜索K,再仔细读题, please help him determine the minimum value o...
阅读全文
摘要:题意:每页书都对应一个知识点,问最少看连续的多少页,才能把所有知识点都看完?分析:《挑战程序设计竞赛》介绍的尺取法,反复推进区间的开头和结尾,来求取满足条件的最小区间,先确定好一个满足条件的区间,然后不断往后移,找满足条件的区间。代码:#include#include#includ...
阅读全文
摘要:题意:N 为合数,对于任意一个在(1,N)之间的数满足 anmodn=a,则称N为Carmichael number,对于给定的N,判断是否为Carmichael number。分析:素数区间筛法+快速幂代码:#include#include#includeusing namesp...
阅读全文
摘要:题意:N 为合数,对于任意一个在(1,N)之间的数满足 anmodn=a,则称N为Carmichael number,对于给定的N,判断是否为Carmichael number。分析:素数区间筛法+快速幂代码:#include#include#includeusing namesp...
阅读全文
摘要:题意:给定N个位置,把C头牛分别放入,求相邻两头牛的最大距离。分析:即为求两头牛之间最小距离的最大值。二分搜索答案。代码:#include#include#includeusing namespace std;const int maxn = 100005, INF =0x3fff...
阅读全文
摘要:题意:给定N个位置,把C头牛分别放入,求相邻两头牛的最大距离。分析:即为求两头牛之间最小距离的最大值。二分搜索答案。代码:#include#include#includeusing namespace std;const int maxn = 100005, INF =0x3fff...
阅读全文
摘要:题意:给定一系列长度的电缆,将他们切成K条相等长度的电缆,问每条最长有多长?分析:对长度进行二分,判断能否满足K条。二分搜索: 在求解最大化或最小化问题中,能够比较简单的判断条件是否满足,那么使用二分搜索法可以很好地解决问题。结束判定: 正常处理整数时,对于[l,r)结束范围即为...
阅读全文
摘要:题意:给定一系列灯泡的额定功率,电源价钱,一个灯泡的价格以及系统所需该种灯泡的数量。已知流过灯泡的电流相等,所以为省钱可以将电压小的灯泡换成电压大的灯泡,但是不能换成电压更小的灯泡,问最少要花多少钱。分析:首先要明确:只要是电压大的比电压小的便宜,就一定要用大的替换小的灯泡。替换必...
阅读全文
摘要:题意:给定一系列货币汇率,求能否从一种货币,经过一系列转换,最终转化回更高价值的该种货币。分析:即为求最长路并判断是否存在“正”权值回路,这里用的bellmanford算法。代码:#include#include#includeusing namespace std;const i...
阅读全文
摘要:题意:三种动物A,B,C,A吃B,B吃C,C吃A, 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是”1 X Y”,表示X和Y是同类。 第二种说法是”2 X Y”,表示X吃Y。 此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有...
阅读全文
摘要:题意:卡车每走一个单元消耗一升汽油,中途有加油站,可以进行加油,问能否到达终点,求最少加油次数。分析:优先队列+贪心代码:#include#include#includeusing namespace std;const int maxn = 10055;typedef pairp...
阅读全文
摘要:题意:n个地方,标号1~n,每个地方都有一头牛,现在要他们都去往标号为x的地方,再从x返回,每条道路都是单向的,求所有牛走的来回的最短路中的最大值。分析:注意在求每头牛走到x时,挨个算肯定超时,可以在将道路反向处理,都变成从x出。之前用vector模拟邻接表超时,后来用链表和数组分...
阅读全文
摘要:题意:两只青蛙在地球同一纬度不同位置x,y向同一方向跳,每只青蛙跳的长度不同m,n,纬线总长度l,问两只青蛙是否能相遇,跳几次才相遇。分析:可知,问题可转化为求(m−n)∗a≡(y−x)(modl)的最小值解a代码:#includeusing namespace std;typed...
阅读全文
摘要:欧几里得算法:辗转相除计算两个数的最大公约数,求gcd(a,b)。证明:设a=b∗p+q,则gcd(b,q)|b ,gcd(b,q)|a,故gcd(b,q)|gcd(a,b) 。 同样q=a−b∗p,则gcd(a,b)|q,故gcd(a,b)|gcd(b,q). 可得gcd(a,b...
阅读全文
摘要:题意:给定字符串,其中’*’表示地雷,’1’表示左/右边有一个地雷相邻,’2’表示左右两边均有地雷相邻,’0’表示左右均无地雷相邻,’?’表示待定,可填入0,1,2或者地雷,有多少种表示方法使字母串满足规定。分析:不难想到用dp[i][j]其中j为0,1,2,3(即四种状态),表示...
阅读全文
摘要:题意:由0-9的数字组成一个形如沙漏的图形,要求从第一行开始沿左下或者右下到达最后一行,问有多少种不同的路径,使最后路径上的整数之和为给定的某个数。分析:简单计数dp,从最后一行开始,设dp[i][j][k]为从下往上已经走过i行,走到第j列,此时路径上的整数之和为k的路径种数。得...
阅读全文
摘要:题意:给定一个数,求用1,5,10,25,50有多少种组合方式。分析:简单计数dp,dp[i][j]表示由前i+1个元素组成j的种数,注意dp[i][0]初始化为1,因为一个元素也不选的方法总是有一种。代码:#include#includeusing namespace std;c...
阅读全文
摘要:题意:一群鲨鱼围成一圈,Wet Shark说个质数p,每个鲨鱼在一定范围内选个数,如果两个相邻的鲨鱼选的数的乘积能被p整除,则每个鲨鱼都将得到1000元,求鲨鱼们最终得到钱数的期望。分析:比赛时乱七八糟的写,一直错,重新读题才注意到题目中说的: If for any pair o...
阅读全文
摘要:今天看了《挑战程序设计竞赛》的动态规划部分,感觉对以前一些知其然却不知其所以然的问题有了更好的理解,先整理一部分。题意:有一个长为n的数列a0,a1,a2,...,an 。请求出这个序列中最长的上升子序列的长度。上升子序列指的是对于任意的i a[j])代码:#includeusin...
阅读全文

浙公网安备 33010602011771号