- 博客(57)
- 收藏
- 关注
原创 POJ 1579 Function Run Fun
这题时简单的dp题,不过我也就能写写这样简单的题了,不过注意一点。 没什么说的,直接按照题目顺序就可以了。 #include #include #include #include #include #include #include using namespace std; int dp[21][21][21]; int recursion(int a,int b,int c) { i
2015-03-10 21:47:02
721
原创 POJ 1410 Intersection
这题我就是用最原始的思考方法,其中有许多细节要注意。主体思想就是四条边分别和线段比较。 线段在矩形内要考虑。 我的代码有点乱有点长,其中有的部分可以写成函数。 #include #include #include #include using namespace std; int x_s,y_s,x_e,y_e,x_l,y_t,x_r,y_b; bool f1(int x) { re
2015-03-04 22:21:53
624
原创 POJ 1269 Intersecting Lines
本题就是判断直线之间的关系,我的思想就是先判断是否共线,然后判断是否平行,剩下的肯定相交,直接求交点就可以了。在判断平行的时候只要看两者的斜率是否相等就可以了,因为在判断平行之前已经判断是否共线,所以只要斜率相等,肯定就是平行了。求交点的时候就是用的数学方法,注意斜率不存在的情况就可以了。 #include #include #include #include using namespace s
2015-03-03 20:50:29
605
原创 POJ 2318 TOYS
这题计算几何的部分还是比较简单的,重点是那个二分有点麻烦(大牛忽略),每次写二分自己都得用笔模拟一番,然后才能确定。 因为y1,y2是公共的,所以存储的时候线段的时候只要存储x的坐标就可以了。然后就是判断是在右边还是在左边。 #include #include #include #include using namespace std; const int N=5005; struct Lin
2015-03-02 22:21:15
654
原创 POJ 1861 Network
这题就是用最小生成树中的kruskal算法的模板题。 #include #include #include #include #include using namespace std; const int N=1002; const int M=15002; const int inf=1<<28; struct edge { int u,v,cost; }es[M]; int
2015-02-21 19:49:58
469
原创 HDU 1009 今年暑假不AC
本题算是贪心中的基础题。 #include #include #include #include using namespace std; const int N=102; struct time { int s,e; }data[N]; int n; bool cmp(time a,time b) { if(a.e==b.e) return a.s<b.
2015-02-21 10:50:48
749
原创 POJ 2485 Highways
只要把prim算法稍微改一下就可以了。 #include #include #include #include using namespace std; const int N=505; const int inf=1<<28; int cost[N][N],mincost[N]; bool used[N]; int n; int prim() { int _max=0;
2015-02-15 16:30:03
561
原创 ZOJ 1586 QS Network
这题还是用最小生成树的模板就可以解决,不过在边的值上面要稍微处理一下。 #include #include #include #include using namespace std; const int N=1000; const int inf=1<<28; int cost[N][N],mincost[N],brand[N]; bool used[N]; int n; int pr
2015-02-15 15:13:04
584
原创 HDU 1087 Super Jumping! Jumping! Jumping!
动态规划题目做的真的很少,自己也不太熟练,这题也是连蒙带猜才弄出来。 dp[i]表示以data[i]结尾的最大分数,那么状态转移方程为:dp[i]=max(dp[j]+data[i],data[i])(0 #include #include #include #include #include #include #include using namespace std; const int N
2015-02-04 22:17:11
498
原创 HDU 1097 A hard puzzle
这道题其实挺简单的,因为只看最后一位,所以就讨论最后一位的情况就可以了。而最后一位显然是有周期性的。 #include #include #include #include #include using namespace std; int main() { int a,b,mode[12]; while(scanf("%d%d",&a,&b)!=EOF) {
2015-02-04 17:48:34
574
原创 HDU 1098 Ignatius's puzzle
这题刚开始看的时候,的确被吓了一跳,13次方,这也太大了,而且还是任意的x,有点麻烦,但是仔细分析之后,发现有点窍门: 65|f(x),不妨设5*x^13+13*x^5+k*a*x=m*65,于是可以得到: x*(5*x^12+13*x^4+k*a)=m*65,继续得到: x*(5*x^12+13*x^4+k*a)/65=m,因为是对于任意的x均成立,所以(5*x^12+13*x^4+k*a
2015-02-04 16:35:57
508
原创 ZOJ 1409 Communication System
这题用的是贪心算法,不过在贪心之前还是要进行部分处理的。 首先就是题目要求B/P尽可能的大,所以P应该尽可能的小,B应该尽可能的大。但是B和P的处理方式是不一样的,B是所有带宽中最小的那一个,P是所有设备的总价钱,所以我能想到一个方法就是一个一个的枚举B,本来我是不敢这样想的,可是题目给的时间比较长,我觉得应该问题不大,当我运行之后,竟然只是0ms,让我吃了一惊。然后再选择设备,这时候就要用到贪
2015-02-03 22:43:41
623
原创 HDU 1338 Game Prediction
这题我用的是贪心算法,我的理解是这样的: 要求我最少能赢的次数,就是求别人最多能赢的次数。首先把我的牌先升序排序,然后我从小开始出,对于我出的牌,别人应该尽可能的压,而且用他们比我大的最小的那张牌;如果他们不压,那么他们后面这张牌就很有可能用不上,就少赢一次。 #include #include #include #include #include #include using namespa
2015-02-03 21:25:52
675
原创 HDU 1102 Constructing Roads
这题很显然用最小生成树来做。不过要稍微变化一下,一开始我打算用一个布尔数组来标记哪些村庄之间已经用道路连接,可是我发现写起来有点费劲,于是突然想到如果把已经修建的道路想象成0是不是就可以呢,仔细想了一下,貌似真的可以,提交之后果然过了。 #include #include #include #include #include #include using namespace std; const
2015-02-03 20:50:31
568
原创 POJ 2231 Moo Volume
这题用的是贪心算法来算的,贪心策略如下: dist数组表示各个牛的位置距第一个牛的距离,当然之前要对牛的位置进行升序排序。 设a为第一头牛距各头牛的距离的总和,然后从第二头牛开始遍历,假设遍历到第i头牛时,那么标准为: t=t-(n-i)*d+i*d, 各变量的含义为:t一开始为a,然后每次就是该表达式运算之后的值; n为牛的总数; d为第i头牛和第i-1头牛之间的距离。这个公式画图其
2015-02-02 22:01:29
768
原创 HDU 1051 Wooden Sticks
这题就是贪心算法,先对length升序排列,如果length相等,再按weight升序排列;反之亦可。然后根据题目要求进行选择即可。 不过我在写排序函数的时候出了一点问题,害得我还一度以为我的贪心策略是错的。 #include #include #include #include #include #include using namespace std; const int N=5005;
2015-02-02 21:14:28
551
原创 HDU 1031 Jungle Roads
这题就是最小生成树的模板题,可是这题的数据给的有点坑。 首先我不清楚给出的村庄是否就是按照从A开始的字母顺序排列,所以我就用一个exist布尔数组来标记这个村庄是否存在; 在者就是两个村庄之间可能有多条路,所以存储的时候应该存储最小的,可是题目没有这样的例子,哎! #include #include #include #include #include #include using name
2015-02-01 23:41:48
667
原创 POJ 3080 Blue Jeans
这题绝对是被坑的滴血,我真想对网上某某人说,去你大爷的。 这题的思路挺简单,本来我以为要用的什么高深的算法,可是听别人说,直接暴力就可以解决,于是就做了。本来很快写好代码,可是语句代码坑了我好长好长时间。 #include #include #include #include #include #include using namespace std; char dna[11][65]; ch
2015-02-01 20:03:59
613
原创 POJ 3463 Sightseeing
最短路和次短路的结合,之前没有碰到过次短路。为此自己特地把最短路知识又复习了一遍,然后看了其他人的想法,最后才写了出来,具体来说,其实不太难,重点是理解思想。存储的时候采用邻接表。 解法: 用到的数组:dist[i][0]:i到起点的最短路,dist[i][1]:i到起点的严格次短路 visited[i][0],visited[i][1]:同一维的visited数组,标记距离
2015-02-01 15:33:47
496
原创 UVa 10285 Longest Run on a Snowboard
这题我的第一感觉就是用DFS。自己写的貌似不够完美,因为我看见别人的时间都特别的短,而我的有点长。 #include #include #include #include #include #include using namespace std; const int N=102; int height[N][N]; bool visited[N][N]; int dx[]={1,0,-1,0}
2015-01-31 21:44:23
544
原创 UVa 127 "Accordian" Patience
这题其实挺简单的,可是自己一开始题目没看懂,或者说题目理解不清,导致结果总是不对,花了不少时间。后来细细地读题,认认真真地读题,终于理解了,自己的英语能力真的不行啊。题目意思是每次都是移动最上面的那个,我一开始认为是把一堆一起移动。 中途调试的时候,写了几条测试语句,最后交的时候忘记注释掉了,结果老是WA,光查找这个就花了不少时间 #include #include #include #inc
2015-01-31 21:35:04
401
原创 Matlab学习笔记(五)
Array Dimensions 这里主要介绍有关的函数: 1、length 语法为: numberOfElements = length(array),它的返回值是数组中最大维的元素的数目。这里的数组是MATLAB所允许的任意数据类型以及任意维。 对于一个非空的数组而言,numberOfElements和max(size(array))是等价的。对于空的数组而言,其值为0. 例子:
2015-01-30 23:31:27
693
原创 POJ 1017 Packets
这题可能是用贪心思想来写的,具体是不是我也不知道,自己对贪心也不是太清楚。之前好像写过,当时似乎没有写出来,不过,这次一下就有了思路。本来是想先装小的包裹,可是试了一下不行,有问题;于是改为先装大的包裹,如果有多余,再装小的,每次都这样,直到所有的包裹被装完为止。试了试,感觉没有什么问题。 代码写的可能有的乱,不过思路还是清楚的。 #include #include #include #inc
2015-01-30 15:57:06
542
原创 HDU 3262 Seat taking up is tough
这题其实挺简单,可是自己就是被坑了很长时间,究其原因,脑袋短路了。本来排完序之后,应该把结果按照未排序之前的顺序输出,结果我就直接输出了,而题目给的例子正好是按顺序给的,输出没有问题,哎,果然够坑。以后再也不能相信题目给的例子了。 #include #include #include #include #include #include using namespace std; int seat
2015-01-30 15:01:23
518
原创 Matlab学习笔记(四)
Indexing Matrix Indexing Accessing Single Elements 可以使用如下语法来调用一个矩阵(Matrix)中的一个特定的元素: A(row,column):A是变量名,行在前,列在后。例如: A = magic(4) A = 16 2 3 13 5 11 10 8 9
2015-01-28 19:07:58
671
原创 Matlab学习笔记(三)
Array Creation and Concatenation Create Numeric Arrays 在MATLAB中,所有的变量都是arrays,并且,默认所有的数值变量都是double类型。例如: >> A=100 A = 100 >> whos A Name Size Bytes Class Attribute
2015-01-28 13:58:50
852
原创 Matlab学习笔记(二)
1、Variable Names (1)一个有效的变量名字是以字母开头,后面接上字母、数字或者下划线。在MATLAB中是区分大小写的,所以A和a是不同的变量。变量名字的最大长度是命令:namelengthmax所返回的值,其返回值为63。所定义的变量不能和MATLAB中的关键字相同,例如if和else。可以使用iskeyword得到一份完整的关键字列表: >> iskeyword ans =
2015-01-28 13:08:38
1261
原创 POJ 3767 I Wanna Go Home
这题是很明显的最短路,我用的是SPFA算法。题目中有一个要求就是只能走一次从1到2,所以我用了一个belong数组来记录,在求最短路的时候,先判断是从1到2,还是从2到1,如果是后者,那么就忽略。最后判断是否存在,只要看dist[2]是否有值就可以了。 #include #include #include #include #include #include using namespace st
2015-01-27 20:23:51
517
原创 HDU 1022 Train Problem I
这题我的想法使用栈的思想去解决的,就是根据进站的序列加入栈中,若和出站最开始的序号相同,则出栈;然后继续进行此操作,和下一个出站的火车序号相比较。这样操作完后看看栈是否为空,就可以判断了。 #include #include #include #include #include #include using namespace std; int main() { char s1[10],
2015-01-26 14:27:29
467
原创 Matlab学习笔记(一)
我所有的学习笔记都是基于Matlab2012b的Help文档,因为是英文,所以自己可能理解的有问题,如发现错误,还望指正。 1.Enter Statements in Command Window 我们可以在命令窗口下输入独立的语句(individual statements),例如创建一个变量a,可以这样输入: a=1 这样之后就会把a加入到workspace中,并且在命令窗口中显示:
2015-01-25 20:43:51
617
原创 HDU 1027 Ignatius and the Princess II
这题我使用DFS来解决的,但是每次我写DFS的时候总是坑在递归结束的条件上,每次都要纠结,这次也不例外。不过总算解决了。 #include #include #include #include #include #include using namespace std; const int N=1005; int ans[N]; bool visited[N]; int n,m; bool df
2015-01-25 16:49:44
599
原创 HDU 1026 Ignatius and the Princess I
这个题目一开始没想到用优先队列,或许说没学过优先队列,结果卡死了。然后看了别人的题解,原来如此,基本方法就是BFS。 优先队列的基本用法:http://blog.youkuaiyun.com/baochunzhi/article/details/7664422,讲解还是比较详细。 这题还有一个注意点就是如何输出,这里就要注意前后的关系,我是用next数组来表示前后两点的相对关系,具体可以见代码。输出的时候
2015-01-25 16:01:44
610
原创 HDU 1003 Max Sum
这题一看就想到用dp来做,至于为什么我也不知道。其dp的思想也比较简单,不过自己写的有点复杂了,看了网上的题解才知道自己是那么的弱。 这个是我的代码: #include #include #include #include using namespace std; const int N=100005; int dp[N],s[N],e[N],data[N]; int main() {
2015-01-23 18:02:11
557
原创 HDU 1016 Prime Ring Problem
这题我用的是DFS。不多说,看代码和注释。 #include #include #include #include #include using namespace std;//因为n<20,所以最大的素数也就是40左右,因此用一个数组来记录45以内的素数,用于之后的判定。 bool isprime[45]={0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0
2015-01-13 22:19:52
465
原创 HDU 1015 Safecracker
终于做对DFS了。这题就是简单的DFS吧,不过对我而言,我是费了不少力气。 #include #include #include #include #include using namespace std; char s[15]; bool isok,visited[15]; int len; void dfs(int target,char *ans,int cnt,int id)//cnt用
2015-01-13 21:29:13
453
原创 HDU 2080 夹角有多大II
简单题,不解释,不过,貌似我现在也就能做做简单的数学题了。 #include #include #include #include const double pi=acos(-1.0); using namespace std; void f(double &angle,double x,double y) { if(x<0&&y<0) angle+=180.0;
2015-01-12 21:23:36
595
原创 HDU 2056 Rectangles
这题就是简单的几何题,刚接触ACM做这题时,不会写,当时想的太复杂了,把矩形的各种情况组合都考虑到了,结果发现这样太复杂就放弃了。今天做这道题时,我突然发现既然题目给的是对角线的坐标,为什么不用对角线之间的关系来判别矩形之间的位置关系呢?于是思路就很简单的涌现出来了。只要画个图,就能明白两者之间对角线的关系。 #include #include #include double _max(doub
2015-01-12 18:55:16
1527
原创 POJ 2777 Count Color
这题其实之前写过,应该算是线段树中比较简单的,不过自己还是被坑了很长时间,就是因为一个小小的错误,怎么找都找不到,哎,急哭了。 这题在找颜色种类的时候,因为最多只有30种颜色,所以可以用一个整型变量来存储,一个位代表一种颜色。这里就要考虑对位的处理了,具体见代码。 #include #include const int N=100005; int L,T,O; struct board {
2015-01-09 22:18:36
432
原创 POJ 2264 Advanced Fruits(最长公共子序列)
这题要用到最长公共子序列,又是DP,可是不会,于是就去学这个,看了一会儿,终于有点心得了。 主体思想就是先求出最长公共子序列,然后把公共字符之前的所有字符都合并起来。具体请看下面的注释。 #include #include const int N=105; char s1[N],s2[N],s[N*2]; int lcs[N][N],index1[N],index2[N];//index和in
2015-01-08 22:54:57
657
原创 poj 3370 Halloween treats
这题用抽屉原理写起来真的很简单,从中也明白数学的重要性。 几个抽屉原理如下: 原理1 把多于n个的物体放到n个抽屉里,则至少有一个抽屉里的东西不少于两件; 原理2 把多于mn(m乘以n)个的物体放到n个抽屉里,则至少有一个抽屉里有不少于m+1的物体。 原理3 把无穷多件物体放入n个抽屉,则至少有一个抽屉里 有无穷个物体。. 原理 4 把(mn-1)个物体放入n个抽屉中,其
2015-01-08 19:52:25
382
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅