摘要: 题意:给定一个图,求从1到N的递增边权的最短路。解法:类似于bellman-ford思想,将所有的边先按照权值排一个序,然后依次将边加入进去更新,每条边只更新一次,为了保证得到的路径是边权递增的,每次将相同权值的边全部取出来一同更新,每条边能够更新的前提是某一个端点在之前被更小的边权更新过。另外一个要注意的地方就是一次相同边的更新中,要把所有的更新暂存起来最后一起去更新,这样是为了防止同一权值的边被多次加入到路径中去。代码如下:#include <cstdlib>#include <cstdio>#include <algorithm>#include &l 阅读全文
posted @ 2013-06-08 19:20 沐阳 阅读(716) 评论(0) 推荐(0) 编辑
摘要: 题意:给定N*N的网格,从某一点出发,问经过T时间后能够出现的位置有多少个?解法:由于从一个点出去后可以原路返回,所以我们只需要记录某个点在T时刻内能否在奇时刻或是偶时刻到达。最后统计一下奇数和偶数时刻到达各点的情况。注意如果8个方向都没方法行走,那么就呆在原地。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#include <iostream>#include <queue>using namespace std 阅读全文
posted @ 2013-06-08 15:05 沐阳 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个两个数M,N,表示有N个1,N个2,一直到N个M,现在要求将这些数排列成一个M*N的矩阵,使得任意一行的两个相邻值差值不大于1,每一列没有两个相同的数。解法:直接输出M,M,M-1,M-1...这样的一个序列之和即可。代码如下:#include <cstdlib>#include <cstdio>#include <algorithm>#include <iostream>using namespace std;int M, N;int main() { while (scanf("%d %d", &M, 阅读全文
posted @ 2013-06-08 13:42 沐阳 阅读(388) 评论(0) 推荐(0) 编辑