上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 66 下一页
摘要: 题意:点与点之间有多条路,并且路是按时开放的,因此需要在边上记录更多的信息。读取一行数时不知道有stringstream类。代码如下:#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <queue>#include <string>using namespace std;const int INF = 0x3f3f3f3f;int N, M, S, T;string str;struct Edge { int v 阅读全文
posted @ 2013-03-08 16:51 沐阳 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 题意:简单点说就是给定一棵树,每个节点都有一个权值,现在要求求出这棵树的一个联通的一枝使其权值最大。解法:设sum[i]为包含i节点在内的一枝的最大权值和,那么sum[i] = val[i] + max(0, sum[j])其中(i,j)之间存在边。当sum[j]为负数时,对父亲节点的贡献就为0了。代码如下:#include <cstdio>#include <iostream>#include <cstring>#include <cstdlib>#include <algorithm>using namespace std;int 阅读全文
posted @ 2013-03-08 14:37 沐阳 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 第十章对象和类爬山涉水终于来到了类的面前,该章开始,终于将于类进行零距离接触了。OOP设计者的思考方式采用过程性编程方法时,首先考虑要遵循的步骤,然后考虑如何表示这些数据。OOP程序员首先考虑数据——不仅要考虑如何表示这些数据,还要考虑如何使用数据。用户与数据交互的方式有三种:初始化、更新和报告——这就是用户接口。在C++中,用户定义类型指的是实现抽象接口的类设计,一个好的接口设计应该与具体的数据关系不大,使用者无需考虑内部数据时如何运转的,修改一个类也不要去改动接口,只需要去修改实现的细节。成员变量、函数类不同于C语言中的结构体,类中还定义了类中数据与程序员交互的操作,成员变量和函数的作用域 阅读全文
posted @ 2013-03-08 10:00 沐阳 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 这题难就难再要字典序输出,要是单单floyd的话,无法保证最后得到的路径字典序最小,一个简单的反例就是如果6 5 7 8 9和6 8 1 2 9以及6 10 1 2 9同时是6-9的最短路的话,如果忽略相等情况下的更新,6 8之间是不会被7作为中间节点而更新的,但是不忽略的话,又可能被中间比较大的节点更新了。所以直接floyd(采用path[i][j] = k表示i到j通过k点的方式还原路径)是不满足题意的。因此这里采用另外一种记录路径的方式,path[i][j]表示从i到j的第二个元素编号,那么由于仅仅只记录了第二个元素,因此当距离相等的时候,我们就只需要考虑新的“第二个元素”是否更优。这样 阅读全文
posted @ 2013-03-07 21:29 沐阳 阅读(760) 评论(0) 推荐(0) 编辑
摘要: 题意:在一个矩形平面内,有若干道墙,现求从左部某一点到右部某一点的最短路径。解法:有一个事实是线路一定是从门两边的点上通过的,不可能出现从中间穿过的可能。因此我们就枚举两两点之间是否可达,这里就要使用到线段相交的判定。构好图之后就是一个spfa搞定。代码如下:#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>using namespace std;int N;struct Wall { double x, 阅读全文
posted @ 2013-03-06 13:36 沐阳 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 题意:求一个点到所有点的最短距离之和加上所有点到这个点距离之和,边为单向边。解法:先做一次spfa,然后将所有的边反序做一次spfa即可。代码如下:#include <iostream>#include <cstring>#include <queue>#include <vector>#include <cstdio>using namespace std;const int MaxN = 1000005;int P, Q, idx, gdis[MaxN], cdis[MaxN];int head[MaxN], rhead[MaxN 阅读全文
posted @ 2013-03-05 20:14 沐阳 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 题意:给定N个点求1-N的最短路,所加的附加条件就是这N个点前A个点为村庄,后B个点为城堡。马里奥用一双靴子,能够在一定距离(L)内花0时间进行穿梭,且只有K次机会,在这种情况下,求解一个最短路。分析:首先对于如何花费这K次机会是一个动态规划的问题,因此我们需要计算出哪些边允许我们进行无代价的穿梭,由于题目还给定了穿梭只能够从某一点开始/结束,因此必须保证某一路径总长度少于L并且题目中还有一个约束条件要求该路径中间不应该有城堡,因为城堡中有陷阱不能够在穿梭的途中有陷阱。而floyd算法能够很好的就算出哪些路径能够穿梭。解法:首先通过floyd算法从1开始枚举中间点,那么由于前A个节点时村庄,路 阅读全文
posted @ 2013-03-04 21:19 沐阳 阅读(525) 评论(1) 推荐(0) 编辑
摘要: 该题又是一个牵涉到节点之间关系通过乘法建立的关系,通过求对数将关系由乘法变为加法应该是可以的。可惜无法无法AC。改为直接相乘却过了。AC代码:#include <iostream>#include <cmath>#include <cstdlib> #include <cstdio>#include <algorithm> #include <cstring>#include <queue>#include <iomanip>using namespace std;/* 一个网络的运送问题,简化之后 阅读全文
posted @ 2013-03-04 12:52 沐阳 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个规则问龟兔赛跑的结果,问题在于乌龟在何时选择充电。解法:由于最多的只有100个充电站,而影响结果的决策发生在各个充电站,因此只要考虑到达充电站时需要采取的策略。通过一个值保留到达某站并充电的最优值即可。代码如下:#include <iostream>#include <algorithm>using namespace std;// 如果两个节点连边,那么弧头上的点一定要加油class Rule {public: static int N; // 充电站的数目 static int vr, vt1, vt2; // 三个速度值 stat... 阅读全文
posted @ 2013-03-03 14:48 沐阳 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 题意:给定1,2,3...N个数的集合,现在求所有非空子集(相同元素不同位置视为不同)按字典序排序后的第M个集合是什么?思路:设i个不同元素组成的非空字典序子集为kind[i],通过递推关系计算出kind[i] = i * (kind[i] + 1)可从计算式上推倒。得到这个关系后就可以通过一位一位的枚举得到答案了。代码如下:#include <iostream>#include <cstring>using namespace std;int seq[25], idx;long long kind[25];int vis[25];void deal(int N, lo 阅读全文
posted @ 2013-03-03 12:20 沐阳 阅读(1340) 评论(0) 推荐(0) 编辑
上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 66 下一页