上一页 1 ··· 5 6 7 8 9 10 下一页
摘要: 题目链接:http://poj.org/problem?id=2349题目大意:有n个村庄要进行通信,现在只有两种通信设备,一种是卫星,通信距离可以任意远,另一种是电报,通信距离有一个上限,要增大上限的话就必须付出更大的代价,现在给你一些设备,n个卫星m个村庄的坐标,让你求可以是任意点直接或间接通信的电报上限距离d。解题方法:本题是prim算法的经典变形,我们可以这样思考,有n的卫星,我们可以把村庄分成n个联通分量,一个联通分量发一个卫星,并且让每个连通分量内部各点间的最大距离不大于d,这样d即为最终的结果,现在的目标是求,各联通分量的上限的最大值,这里使用了一个定理:如果去掉所有权大于d的边 阅读全文
posted @ 2011-08-19 15:59 我们一直在努力 阅读(550) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2195题目大意:给你一个矩形里面有相同数目的人和房子,每个人只能进一个房子,问题求是所有的人进入房子的最小距离和,相邻之间为一步。本题可以用最小费用最大流来解,之前对这一类题一直用所畏惧,之前学过一段时间没学会,放弃了,正好利用这个暑假,把网络流攻破。自己看了王晓东那本书上关于最小费用路算法的讲解,但没写过,不知道怎么实现,就找了位大牛的参考。好了不废话了,下面说此题。我们可以这样构图,让每个人与每个房间相连,边的容量为1,费用为它们之间的距离,同时构造一个超级源点和超级汇点,源点与每个人相连费用为0容量为1(这样可以保证每个人只 阅读全文
posted @ 2011-08-16 15:34 我们一直在努力 阅读(404) 评论(0) 推荐(0) 编辑
摘要: 算法讲解:http://imlazy.ycool.com/post.1603708.htmldfs实现View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 int g[505][505],m[505],n[505],vist[505]; 6 int k,mm,gg,sum; 7 int search1(int i) 8 { 9 int j;10 for (j=1;j<=gg;j++)11 {12 if (g[i] 阅读全文
posted @ 2011-08-09 11:22 我们一直在努力 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.nankai.edu.cn/p1207.html题目大意:给你n个数判断利用所给的数字长度是否可以组成正方形,对于一般不成立的数据可以根据长度之和是否为四的倍数,但满足这条件的也不一定是正方形,要进行四条边的判定,即dfs搜索每条边,只有四条边同时成立时才能说明成立,这里需要进行优化,由于和poj 1011相同故这里不再说明,见下文 。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include<cstring> 4 using namespace std; 5 阅读全文
posted @ 2011-08-07 14:40 我们一直在努力 阅读(532) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.nankai.edu.cn/p1020.html题目大意给你一个数字让你把它变成另一个数只有以下三种操作问题描述: 题目给出数a(a是一个正整数,不超过50位),再给出目标数b(同样是一个正整数,不超过50位),数的运算有三种: 1:使当前数加上1985429 2:使当前数加上2006 3:使当前数乘2 需要你求出这个最小的n(次数),如果n>6,输出-1。(此为负一)。思路bfs 难点大数的加和乘同时使用bfsView Code 1 #include<iostream> 2 #include<queue> 3 #include&l 阅读全文
posted @ 2011-08-05 21:05 我们一直在努力 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.nankai.edu.cn/p1504.html题目大意给你两个四位素数一个作为起始,一个这作为结束。每次只能换中间的一位数字且换后的四位数还为素数,求最少需要几步。我的垃圾代码View Code 1 #include <iostream> 2 #include <queue> 3 #include <cstring> 4 using namespace std; 5 int a[10000],b[10000]; 6 int c[5],d[5],g[5]={0,1,10,100,1000}; 7 int main () 8 { 阅读全文
posted @ 2011-08-05 20:45 我们一直在努力 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686http://59.69.128.200/JudgeOnline/problem.php?pid=61大意是找两条不交叉的路是其路上个数字之和最大,类似于传纸条。先写传纸条/* NYOJ61传纸条双线DP,大概思路如下:*首先考虑题意是从左上角传到右下角,再从右下角传到左上角,并且不能重复路线上任何点,除起始点和终点外* 这样问题就可以转化为从起点双线走向终点,双线不相交。类似于单线DP,我们可以写出双线DP方程*针对该为题我们唯一需要添加的就是限制条件,不能让此双线相交。*状态转移方程:*d 阅读全文
posted @ 2011-08-03 19:14 我们一直在努力 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 35,15,+,80,70,-,*,20,///后缀表达方式(((35+15)*(80-70))/20)=25 //中缀表达方式/,*,+,35,15,-,80,70, 20 //前缀表达方式人们习惯的运算方式是中缀表达式。而碰到前缀,后缀方式。。迷茫其实仅仅是一种表达式子的方式而已(不被你习惯的方式)一个中缀式到其他式子的转换方法~~这里我给出一个中缀表达式~a+b*c-(d+e)第一步:按照运算符的优先级对所有的运算单位加括号~ 式子变成拉:((a+(b*c))-(d+e))第二步:转换前缀与后缀表达式 前缀:把运算符号移动到对应的括号前面 则变成拉:-( +(a *(bc)) +(de) 阅读全文
posted @ 2011-08-02 10:51 我们一直在努力 阅读(680) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://59.69.128.200/JudgeOnline/problem.php?pid=56http://59.69.128.200/JudgeOnline/problem.php?pid=70给出两种方法,方法一:比较笨的拿2--n中间的数取枚举,View Code 1 2 #include<iostream> 3 using namespace std; 4 int main() 5 { 6 int k,i,j,n,m,w,a; 7 cin>>k; 8 while(k--) 9 {10 w=a=0;11 cin>>n>>m 阅读全文
posted @ 2011-07-30 16:00 我们一直在努力 阅读(1591) 评论(0) 推荐(0) 编辑
摘要: 对于(4^k-1)/3之类的处理 也就是所说的大数运算,可以通过数学转化成字符串 即阶乘 t=1;(4^k-1)/3={t*=4;t++;}例如:http://59.69.128.200/JudgeOnline/problem.php?pid=45也就是所谓的棋盘覆盖问题View Code 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 5 int main() 6 { 7 int n; 8 cin>>n; 9 while(n--)10 {11 int a[100];12 m 阅读全文
posted @ 2011-07-29 21:27 我们一直在努力 阅读(272) 评论(1) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 下一页