摘要: 这是对之前用dijkstra写的那题的重写。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 #define N 1001 7 #define INF 0x3f3f3f3f 8 9 int n,m,dist[N][N],cost[N][N],vis[N],lowcost[N],lowdist[N],queue[N*N];10 11 void spfa(int s)12 {13 memset(vis,0,sizeof(vis)); 阅读全文
posted @ 2012-03-22 15:24 HanTQ 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 刚刚看了杭电的acm的ppt,里面有一讲的主题是母函数。开始并没有理解母函数的用处,知道后面看到那个例子,顿时感觉这个构造函数的方法真是巧妙。问题描述:若有1克、2克、3克、4克的砝码各一枚,能称出哪几种重量?各有几种可能方案?初看这题,感觉应该用枚举吧,当然这题的数据很简单,但是当数据量大到一定程度时这么做是很慢的。一种巧妙的做法就是构造母函数,做法如下: 1个1克的砝码可以用函数1+x表示, 1个2克的砝码可以用函数1+x2表示, 1个3克的砝码可以用函数1+x3表示, 1个4克的砝码可以用函数1+x4表示。这样一来,只需通过计算 (1+x)(1+x2)(1+x3)(1+x4) = 1+x 阅读全文
posted @ 2012-03-17 19:27 HanTQ 阅读(527) 评论(0) 推荐(0) 编辑
摘要: 寒假一个月在家刷了100多道水题,基本的处理已经掌握得差不多了,回学校后开始从图论继续搞。图论这里的东西不难理解,但是写出代码来却很繁杂(多半是受国内数据结构教材的影响),于是在网上搜加上自己修改终于总结了一套我能够理解并掌握的模板,现在拿出来分享给同样挣扎于面对图论题无从下手的童鞋。P.S.:由于考研机试要求不高,这里的算法不做优化了(binary heap or fibonacci heap......),均采用朴素的方法。一、最小生成树 1.Prim 1 //N至少为顶点数目的上限+1,因为很多题目顶点从1开始编号,这样定义方便一些,就不需要考虑0了 2 #define N 101 3 阅读全文
posted @ 2012-03-09 10:27 HanTQ 阅读(539) 评论(0) 推荐(0) 编辑
摘要: 刚才又复习了一下dijkstra算法的模板,顺便看了下Floyd算法,所以找了道水题敲了下,HDOJ上的最短路。 1 //Floyd算法 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 #define N 101 8 #define INF 0x3f3f3f3f 9 10 int n,m,adj[N][N];11 12 void floyd()13 {14 for(int i=1;i<=n;i++)15 for(int j 阅读全文
posted @ 2012-03-08 18:17 HanTQ 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 上午做了下这道排序题,题目链接:http://ac.jobdu.com/problem.php?id=1007题目就是纯粹的模拟题,注意只需对后输入的m个国家排序即可。代码如下: 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 struct Olym{ 6 int goldmedal,medal,po,rank[5]; 7 double gpo,mpo; 8 }nation[200]; 9 10 int todo[200]; //存待排序的国家的编号11 12 int main() 阅读全文
posted @ 2012-03-07 13:36 HanTQ 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://ac.jobdu.com/problem.php?id=1016今天做了下这道五星的题,题目倒是不难,但是由于疏忽导致一直RE,最后玉玉发现了问题所在,才使得悲剧没有继续。这题的思路类似于做高精度的运算,就是按位加,如果超过相应位的权值,就向上进位。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 char stra[1000],strb[1000]; 7 int a[30],b[30],c[30]; 8 阅读全文
posted @ 2012-03-06 22:11 HanTQ 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://ac.jobdu.com/problem.php?id=1123发这篇文章就是为了记录下模板,把二维数组压成一维数组,很简单的实现。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 int Time[110],Value[110],f[1010]; 7 8 int main() 9 {10 int i,j,t,m;11 while(scanf("%d %d",&t,&m 阅读全文
posted @ 2012-03-05 20:39 HanTQ 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://ac.jobdu.com/problem.php?id=1008看到这道题,直接就想到要用dijkstra算法来做。后来看到网上说用SPFA算法来做更简单一些,我想先用dijkstra实现后在学习下SPFA。在实现过程中只需对dijkstra算法进行简单的修改就可以了,加入在长度相等时对花费的判断即可。同时在输入时要考虑有重边的情况。代码如下: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 #defin 阅读全文
posted @ 2012-03-05 19:31 HanTQ 阅读(442) 评论(0) 推荐(0) 编辑
摘要: 最近开始做图论题,先从MST入手,MST最常用的两个算法就是Prim和Kruskal+Union-Find Set了。这道题由于是稠密图,所以选用Prim更适合一些。简单的模板题,只是为了熟悉下Prim的写法,就不做过多的解释了。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 #define N 101 7 8 int n,adj[N][N],visit[N],lowcost[N]; 9 10 int prim()11 {12 阅读全文
posted @ 2012-03-05 14:50 HanTQ 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 个人第一道DP,选了个简单的做入门指引了~从明天开始逐步深入学习DP~题目的意思很简单,求出三角形第一行到最后一行的一个路径的最大值。思路:从最后一行开始向上逐行累加,从而找到最大值。题目链接:http://poj.org/problem?id=1163 1 #include <iostream> 2 using namespace std; 3 4 int a[101][101]; 5 6 int main() 7 { 8 int i,j,n; 9 cin >> n;10 for(i=1;i<=n;i++)11 for(j=1;j<=i;j++)1... 阅读全文
posted @ 2012-01-28 23:58 HanTQ 阅读(211) 评论(0) 推荐(0) 编辑