自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 收藏
  • 关注

原创 图算法总结

图算法的问题。包括最小生成树问题和最短路问题。最小生成树问题包含两个算法,也就是prim算法和kruskal算法,最短路问题两种问题,第一种问题是单源最短路径,包括三个算法,也就是ballman-ford算法、spfa算法和dijkstra算法,另外一种问题是每对顶点的最短路径,它只包括一种算法,是floyd-washall算法。在最小生成树的问题中,prim算法依赖于强连通图的问题,而k

2016-07-07 11:26:53 402

原创 Problem-J

概述:从A到B,求一共有几条最短路。思路:先将给出的数据转换为两地之间的距离,然后再用bfs去求。感想:自己用bfs写的代码,最后是runtime,然后改掉部分代码,试了两次,成了timelimit。。不太理解这两个有多大区别,然后过不了,最后找到一个使用dfs的方法通过的代码,感觉差不太多的样子,就是超时不能理解。附上自己的代码:#include#include#includ

2016-07-04 14:20:06 247

原创 ACM最终总结

ACM,Association for Computing Machinery , 即国际计算机学会,ICPC,International Collegiate Programming Contest , 即国际大学生程序设计竞赛。选修课ACM程序设计,是为了ACM开设的课程,或者说是为了选拔有意向参加ACM程序设计大赛的人。这门课就现在已经结束的课时而言,是教授关于ACM设计的部分算法知识,

2016-07-02 16:53:46 1255

原创 Problem-H

概述:给出一些点,要求将这些点构成一个环,求在构成环的情况下,权值最大的情况。思路:并查集的问题,用kruskal算法解决,讨论构成一个环还是两个环,一个环保留,两个环舍弃,输出整个图的最大值。感想:套用kruskal算法的模板,感觉这套题现在做过的全都是套用了模板,解决问题,唯一需要的就是变动一下输入以及细节处理,就可以。#include#include#include#inc

2016-07-02 16:19:12 233

原创 Problem-K

概述:输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个;接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=思路:最短路问题,用一次dijkstra算法就可以解决。将草儿的家以及邻镇看作0,然后求想去的地方的最短路。感想:套用dijkstra算法模板,然后转换输入输出就可以了,但是第一次因

2016-06-30 18:38:34 288

原创 Problem-I

概述:有一些t-shit,然后需要运到不同城市的地方,给出城市之间需要的时间,问所需最短时间。思路:非常简单的最短路问题,用floyd算法解决。确定好输入情况,套用基本框架即可。感想:非常简单的一道题,用算法框架即可解决。#include#include#include#include#include#includeconst int N = 105;int map[N

2016-06-29 21:50:50 190

原创 Problem-G

概述:一些城市被水淹没,现在要求在这些城市中修建可以连通的道路,其中一些城市本身存在,求在这种情况下的最短路。思路:kruskal算法问题,边权排序然后用并查集添加边即可。感想:下午做的,然后写了一篇博客,结果晚上在管理博客时候不小心删掉了。。然后再来补上。下午做的时候开始以为是prim的题目,然后画了好久的图才发现prim算法没有办法解决,不是强连通问题,而且是最短路问题,所以自然考虑的

2016-06-28 20:30:09 240

原创 Problem-F

概述:小岛上有一些路,这些路需要每年维护,然后因为维护金额太大,需要精简道路的长度,现在要求在连通的情况下最短,求精简后路程的长度。思路:很明显的最短树问题,跟昨天ac的几道题类似,用prim算法,将输入的数据转换为邻接矩阵即可。感想:类似昨天的题目,唯一的变化就是输入数据再度改变,所以只要将输入数据改成矩阵,核心prim代码完全不用改变就轻松ac。#include#include

2016-06-28 12:55:03 184

原创 Problem-E

概述:基本内容同Problem-D,唯一不同就是加入了一个修建状态,即这条道路又可能已经修建,求在这种状态下的最短长度。思路:大致同Problem-D,状态就是需要比较一下即可,已修建则不需要在修建,只需要判断未修建的。看到题目的一瞬间感觉这套题疯了,连续5道题目,代码基本可以套用,这道题格外,就是判断一下状态即可。但是不理解的是同一套代码竟然超时。。上一道题可没有这样。。。改完后轻松ac

2016-06-27 16:42:50 198

原创 Problem-D

概述:有一些城镇之间需要接通道路,然后给出城镇序号和每个城镇之间的距离,求在什么情况下城镇之间道路距离之和最小。思路:很明显的最短树问题,类似于第一个问题,无非就是把邻接矩阵转换为每个城镇和城镇之间的距离,进行一部转换即可。感想:看到这个问题就想到第一个问题,这样连核心代码都没换,直接套用,就是在最后main主函数时候出了问题,要将条件转换为邻接矩阵,需要定义map[y][x]=map[x

2016-06-27 16:24:24 204

原创 Problem-B

概述:给出一些点的坐标,然后将这些点连成一条直线,这条直线要求长度最短。思路:很典型的最短树问题,类似于刚刚的城镇问题,无非就是将坐标转换为距离,可解。感想:做了刚刚的那个城镇问题,这道题一点都不难,就是将坐标一转换,然后源代码套用即可,问题是在提交一直ce,还以为是上一道题那种情况,改来改去发现是掉了头文件。。。。好粗心啊。#include#include#include#in

2016-06-27 15:52:25 191

原创 Problm-A

概述:现在给出城镇数目,各个城镇之间的距离,以及已经修建道路的城镇。城镇之间的连通符合最小生成树。求最短需要修建多长的道路可以使城镇连通。思路:用prim算法,取一个不再以连通的城镇,去权值,选择最小即可。最终输出为所求值。感想:图都已经结课了。。上周因为一些选修课结课,需要写东西和复习,然后没刷题,这个周整整一周空闲,有机会了。然后这道题在提交时候前两次我选了图的基本算法.ppt提供的p

2016-06-27 14:30:27 259

原创 Problem-C

概述:某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? 思路:并查集的问题,非常典型。感想:半个月前开的这套题,然后上周才a的,今天才来写这个博客,有点晚。。#includeusing namespace s

2016-06-23 11:30:16 200

原创 动态规划算法总结

动态规划,是求解决策过程最优化的数学方法,是在处理问题过程中,把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解的一种方法,它没有一种确切的解题步骤,它的解决思路是多种多样的。        这套题里边遇到的dp问题主要有斐波那契数列、最长上升子序列问题、还有就是两种背包的问题。        斐波那契数列:f(n)=f(n-1)+f(n-2),这个就是著名的斐波那契数列,

2016-06-02 22:21:27 257

原创 Problem-S

概述:给出一些金额和数量,求出如何分才能最接近a的值且不超出b的值。思路:求出给的金额的总和,然后平分,转换为一道01背包的题目。感想:这道题做了一个周了,但是思路不是我自己的,因为完全背包不熟,当时又恰巧发现了这个方法,将完全背包转换为01背包,很令人惊艳的思路,所以当时就把这道题按照人的思路做了出来,然后看了看别的完全背包,结果好像并不是通用的,但是这个可以的。#include#

2016-05-30 22:09:26 196

原创 Problem-R

概述:给一个储蓄罐,开始时候储蓄罐有自己的重量,并且能装的金币有最大限制,然后问在打破罐子可以拿钱买到东西时,最少需要存多少钱。思路:dp的完全背包问题,将01背包的求解方式倒序一遍就可以,求最小值,最后输出时减去开始时候的罐子重量。感想:交的有点晚了。。上午在机房做的一道题,不过在机房因为编译器不习惯,报错,没来得及交,然后刚刚写完一份表格之后改了改,在本地可以之后便上交了,最后发现是状

2016-05-30 00:06:59 231

原创 Problem-X

概述:现在有一些商品,手里有一些钱,然后每件商品都有自己的金额和价值,但是每一件商品购买都需要手中的金钱大于某个值,在这种情况下,求最大得到的商品的价值。思路:01背包问题,这道题跟别的不同在,所需的金币有了一个限定值,这样的话用一下排序,保证在当前状态下手中金币的值是最有可能大于商品的限定值的,然后就用状态转移方程像解一般的背包问题解决。状态转移方程:dp[j] = max(dp[j], d

2016-05-26 23:39:46 301

原创 Problem-W

概述:提交offer,每提交一份需要花一定的金额,然后有一定的几率拿到offer,现在一共有一定的金额,问在金额允许的情况下拿到offer的几率是多少。思路:dp中的01背包问题,推导状态转移方程:dp[j] = min(dp[j], dp[j - money[i]] * offer[i]);然后这道题跟别的比起来有意思的是不直接求所求数据,用1去减,然后结果在减,间接求。感想:提交第一遍

2016-05-24 09:49:30 194

原创 Problem-Q

概述:主人公有个背包,用背包来装骨头,背包包括可以承装的骨头的体积,现在给出骨头的数目和每块骨头的体积以及价值,求在背包可以装下的情况下骨头的最大价值。思路:dp问题的01背包问题,主要在状态转移方程:dp[j] = max(dp[j], dp[j - cost[i]] + a[i]);把能撑装的情况下价值最大求出即可。感想:在做之前先去看了看背包九解。。发现有点多,所以只看了01背包,然

2016-05-23 21:27:36 159

原创 Problem-H

概述:给出一块地图数据,需要从最左上角走到最右下角,每走一步所在的地方都有数据,求怎么走才有最大的数据。思路:DP的问题,需要考虑的是相加会出现负数。感想:自己做了一遍,最后自己在编译器上结果始终出不来,然后再别人博客看到才发现没有考虑负数的问题。。。然后按照那个思路再来一遍,过。#include #include#include#include#includeusing

2016-05-23 12:18:07 185

原创 Probl

概述:有0-10十个位置的点,起始点在5,现在每秒在任意位置掉馅饼,每秒人物可以移动一步,求最多能够收集多少馅饼。思路:dp的题目,设立一个数组用来储存某一秒掉到某点的馅饼,最后求最大值,满足就可以。感想:上午在机房做的题,然后因为编译器的原因,晚上才改了改题目,上交,提交两遍,wa,不清楚原因,然后把代码重新写了一遍,ce,掉了头文件。。。改完上交成功,这道题上交路程充满坎坷。。。#

2016-05-22 22:26:03 331

原创 Problem-D

概述:输出总长度小于5842的数字,数字满足的规则是必须含有因子2,3,5,7。思路:发现了一个强大的算法,就是四个数字,分别对应四个数字,每次分别乘2,3,5,7.然后这些数字求最小值,然后最小值对应的数字加,再次相乘,不断循环,直到到达极限。感想:自己开始时候做了这个题,自己的思路是数字乘2,3,5,7,然后取恰当的值,忽然发现这样或许会有拉下的数字,然后用数组储存求出的数,分别对2,

2016-05-16 21:58:16 173

原创 Problem-C

概述:给出一个数字序列,让从某一点开始行走,每走一步求和,走的每一步必须比上一步的数字大。思路:设置一个数组,每走一步,如果满足要求,将这个位置的数与之前的数相加,记录在数组里,最后数组求最大值,就是问题的解。感想:从测试数据中看出来是一个求最大和的问题,翻译没看开始写代码。。题目不难,但是提交时又忘记fstream,做错一次。。#include#include#include#

2016-05-16 21:05:52 214

原创 Problem-B

概述:给出两个序列,求序列的公共最长序列。思路:用一个动态的数组储存相同的字符,每个字符之间比较,如果不用DP的话,用一个for循环嵌套应该也是可以做的,无非在结果处理上有些费事。感想:有例题的存在,这个题并不是太难,但是始终有一点不明白的是在测试数据中第二组programming contest,是怎么出现2的,也不知是否是我翻译错了。。。总共做出来了,虽然提交时候出现了Memory L

2016-05-16 20:44:19 189

原创 Problem-A

概述:给出一段序列,求在这段序列中能求出的最大和,并且表示出这个和是从那里开始到哪里结束。思路:最大序列和的问题。讲课时候讲过一道这样的题目,但是与那道题目不同的是,这道题要求把序列开始时数字的位置和结束时数字的位置写出,这个就要求在结束时选择的数字相等时就是结束的标志,然后倒着推回去,当数字相等时就是开始的位置。思路:上午上课做的这道题,最开始落掉了位置这个。。wa了,改掉之后又然后因为

2016-05-08 23:05:02 568

原创 Problem-P

概述:现在规定了平面内可以行走的方向,向左向右和向上,不能够向下,现在给出行走的步数,问在这个步数内最多有多少种方案。思路:一个类似与斐波那契数列的地推题目,不过与斐波那契数列不同的是,在选择向左或是向右走一步之后,下一步只能有两个方向,而在选择向上行走时,可以有三个方向,即向左上或是右上或者一直向上。也就是在相邻的某一步内,选择的方案成为两倍,即f(x)=2*f(x-1)+f(x-2)。

2016-05-08 10:39:48 213

原创 Problem-K

概述:六角形的蜂房,小蜜蜂从某个蜂房走向另一个蜂房,每次只能从蜂房的右侧行走,问一共有多少种方式。思路:每个蜂房内向右走有两个方向,右上、右下,对于不相邻的两个距离最近的蜂房,从中间相隔一排通过时,又是一个斐波那契数列,也就是f(n)=f(n-1)+f(n-2),而对于一个规则的蜂巢来说,从标号的1走到6跟从3走到8是没有差别的,可能的方式是中间间隔的蜂房数。感想:夹在好几个斐波那契数列之

2016-05-07 22:53:40 226

原创 Problem-N

概述:用折线切割平面,求n条折线最多能切出多少平面。思路:在高中学过的推理规律,f(x)=f(x-1)+4(x-1)+1,来由是切割平面数=交点数+顶点数+1。感想:从高中数学规律推理这道题,在将规律总结归纳,得到2*x*x-x+1.推理过程用了高中的等差数列的知识,所以这个题就现在来讲只是不熟悉。。#include#includeusing namespace std;in

2016-05-07 22:27:34 174

原创 Problem-O

概述:将一个十进制数转换为二进制。思路:利用辗转取余,不断取余。感想:开始时候用一般的数组做的,结果发现在处理转换过程中出现的0的时候不好处理,毕竟不知道有多少位,所以用了vector数组,但是在最后输出是出了问题,辗转取余时候产生的数字是倒置的,最后输出需要倒置过来,自己解决不了这个问题,找同学问,利用了反向迭代器,学会这个方式,解决。#include#include#inclu

2016-05-07 22:01:59 175

原创 Problem-J

概述:有个台阶,每次只能上一阶或者两阶,问要到某一台阶,共有多少种走法。思路:动态规划的问题,用斐波那契数列解题,每上一层台阶,从相邻的下台阶只有一种方式,但是上下台阶有不同方式,然后相隔的下台阶上这个台阶也有一种方式,同时上相隔的台阶有不同的方式,所以相加就是上这个台阶的方式,斐波那契数列。感想:下午写完的题目好像忘记写感想了。。这两道题目都是斐波那契数列的题目,推理找出规律就简单了,所

2016-05-07 21:21:51 163

原创 Problem-F

概述:现在有一个数塔,要从顶层走到底层,问走过的数的和最大是多少。思路:作为动态规划的题目,这个题在推理时明显是从最底层开始,走向最顶层,这样从最底层的某一个开始,想倒数第二层走,将每个最底层的数字加到倒数第二层,求最大的数字,然后再向上走,直到到顶层,就是所求的最大数。#include#include#includeusing namespace std;int max(int

2016-05-07 16:09:42 229

原创 Problem-L

概述:现在用多米诺骨牌去排2*n的矩形,骨牌是2*1的规格,现在问共有多少中排法。思路:当n=2时,有2种排法,当n=3时,有三种排法,而当n=4时,有5种排法,n=5时,有8种排法,从数字上看是一个斐波那契数列,可解。感想:靠数数字就可以数出来,推导出递推公式就能解题,但是提交一直ce,改了多次一直ce,检查无错,最后找人的代码改掉交上,个人感觉ce的原因可能是因为中文符号。#inc

2016-04-27 23:52:34 188

原创 Problem-M

概述:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。求某一年共有多少头牛。思路:在前三年按照每年一头增加,从第四年开始,第四年生的牛对应第二年有的牛,第五年生的牛对应第三年有的牛,以此类推,fn = f3 + f1;f1 = f2;  //f1代表前3年f2 = f3;  //f2代表前2年f3 = fn;  //f3代表前1年。可解。

2016-04-26 20:43:24 241

原创 搜索算法总结

搜索算法分为BFS和DFS。    如果将一个题目分为多个阶段,那么BFS是在每个阶段里将每个阶段可能出现的情况全数列出,然后再进入下一个阶段。    DFS是将某个分支所有的情况列出,然后一项项列。搜索算法理解容易,但是做题相对难。    再就是二分算法,二分算法主要分为二分查找和三分搜索。    二分查找主要针对的是单调函数给定函数值,求自变量值的情况,非常简单,优点是比较

2016-04-25 10:17:29 280

原创 Problem-1017

概述:三个杯子倒可乐,杯子之间互倒,求是否能够均等分开。思路:杯子可乐为s,m,n,s中为s,mn为0。6种情况:s倒m,s倒n,m倒n,m倒s,n倒m,n倒s。最后n、s中能等分即可。感想:上课讲的例题,所以直接把老师的代码拿来copy了.../脸红...只是出现了两次ce,改了头文件过了,原因大概是因为网站的编译器需要的头文件完整写出,不像一般的编译器,部分头文件可以从iostream

2016-04-23 17:56:41 160

原创 Problem-1008

概述:A有一个数字,让B去猜,A只能说“大了”,“小了”,“对了”,求在n次可以猜出的最大数。思路:在正常猜数的时候,最多需要猜log(2)+1次就能把数字猜出来,也就是需要2^n-1次,所以推出解题答案。感想:不算难的一道二分题目,个人思路是一点点从右侧推理,总结规律推出答案,但是看到这个解题方式,感觉很简单,所以学习了这个。#include#include#include#i

2016-04-23 17:05:56 198

原创 Problem-1005

概述:west先生要将车开过一个拐角,现在给出拐角两侧道路的长度和汽车的长度和宽度,求车是否能过去。思路:车能过去,就是车的左侧紧贴直角点,右侧紧贴道路下方的店,使用函数得到:F(a)=lcosa-(x-w/cosa)/tana,是一个单峰函数,所以可以使用三分法。感想:知道是三分,题意不难理解,难的是那个方程的解,写出来题就简单了。#include#include#include

2016-04-23 16:51:56 249

原创 Problem-1004

概述:现在从坐标系的原点开始射箭,求夹角最小能够射到给定的点,并且夹角最小。思路:题目可以用二分法做,但是如果将题目列成方程组解方程,出来答案会更简单。感想:知道是二分的题目,但是二分没找到思路。。。无奈,找了下网上的思路,发现用方程更简单,所以列了半小时的方程,解出了答案。#include#include#include#includeusing namespace std;

2016-04-18 11:45:51 218

原创 Problem-1003

概述:有一堆pie,现在有一部分人去吃pie,需要将pie分开,现在问每个人最多能拿一块pie的时候,怎么分每个人能拿到的pie最大。思路:利用二分,不断进行折半缩小范围。感想:这道题自己做完测试过了,提交wa》。一直wa,最后找到别人的代码给粘上的,但是不知道自己的为什么一直wa.....#include#include#includeusing namespace std;in

2016-04-18 09:09:33 252

原创 Problem-1002

概述:给出方程式F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x,给定y的值,求解当x等于何值时,F(x)有最小值。思路:利用F(x)的导数,当F'(x)=0,F(x)就是所求的最小值,此时的x就是所求值。解题步骤就是利用二分法,一步步求出符合x的值。感想:看到原题以为是跟第一题一样的题,然后把输入的数当成F(x),陷入死循环...看了几遍原题才反应过来,浪费了时间

2016-04-11 10:29:39 234

空空如也

空空如也

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

TA关注的人

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