题目链接题意:给n个数,要求这n个数字小的尽量放到前面,求一个最小的。给一个矩阵s[i][j]==1,表示位置 i 的数字可以和 位置 j 的数字交换。分析:刚开始用的是3个循环,每次都找一个能直接连接的最小的放到前面,过了小数据,快结束的时候被hack了。其实不应该这么做,因为还有间接相连提前交换...
分类:
其他好文 时间:
2015-01-01 01:30:26
阅读次数:
172
A:签到,从左往右走一遍判断下有没有遇到t即可
B:先利用floyd求出传递闭包,然后利用这个传递闭包贪心小的尽量往前放即可
C:贪心的策略,放的顺序其实根据拿的顺序就可以确定的,所以只要在拿的顺序上从左往右扫一遍即可
D:先DFS预处理出每条边两边点的个数,然后三元组对于每个边经过都是n - 2次,所以一个边都会被计算到n - 2 * 一边点 * 另一边点个数
...
分类:
其他好文 时间:
2014-12-31 22:50:01
阅读次数:
183
求出有n(1
Input
第一行有2个整数n和m( 0
Output
输出只有一行,为结点1到结点n之间的最短路径及其条数(用空格隔开),如果1到n之间不存在路径,输出 -1 0。
Sample Input
3 3
1 2 10
2 3 15
1 3 25
Sample Output
25 2
分析:本题中两相邻点间可能存在多条路,但每条路长度相同,这...
分类:
其他好文 时间:
2014-12-31 18:35:01
阅读次数:
500
/**
?*?@brief?uva?11549
?*?@file?11549.cpp
?*?@author?mianma
?*?@created?2014/12/31?11:43
?*?@edited??2014/12/31?11:43
?*?@type?
?*?@note?floyd判圈算法
?*/
#include?<fstr...
分类:
其他好文 时间:
2014-12-31 14:42:15
阅读次数:
237
求出有n(1
Input
第一行有2个整数n和m(0
Output
输出结点1到结点n之间的最短路径,如果1到n之间不存在路径,输出 -1。
Sample Input
3 3
1 2 10
2 3 15
1 3 30
题目分析:dijkstra单元最短路径。
一.最短路径的最优子结构性质
该性质描述为:如果P(i,j)={Vi....Vk..V...
分类:
其他好文 时间:
2014-12-31 10:07:41
阅读次数:
705
题目大意:给定一张无向图,求从s出发恰好经过n条边到达e的最短路
倍增Floyd……为何大家都管这个叫做矩阵乘法- - 算了为何要纠结这种事- -
令f[p][i][j]表示走2^p步从i到达j的最短路 有f[p][i][j]=min{f[p-1][i][k]+f[p-1][k][j]}
将n进行二进制拆分 用矩阵g记录答案矩阵 对于每一位p 用f[p]和g两个矩阵搞出h 再将h的值赋给g
...
分类:
其他好文 时间:
2014-12-30 09:16:28
阅读次数:
212
题目大意:求恰好走k步从S到T的最短路。
思路:设f[p][i][j]为从i到j恰好走2^p步的最短路,DP方程十分简单:f[p][i][j] = min(f[p][i][j],f[p - 1][i][k] + f[p - 1][k][j]);
对总步数T进行二进制拆分,在T有1的位置上,假如这个位置为p,那么就用f[p][][]来更新答案g[][],最后得到的g[][]就是答案矩阵。...
分类:
其他好文 时间:
2014-12-30 09:16:17
阅读次数:
184
Risk is a board game in which several opposing playersattempt to conquer the world. The gameboard consists of a world map broken upinto hypothetical countries. During a player's turn, armies stationed...
分类:
编程语言 时间:
2014-12-29 18:25:50
阅读次数:
316
最短路径
路径的概念:
在一个无权的图中,若从一顶点到另一顶点存在着一条路径,则称该路径长度为该路径上所经过的边的数目,它等于该路径上的顶点数减1。
由于从一顶点到另一顶点可能存在着多条路径,每条路径上所经过的边数可能不同,即路径长度不同,我们把路径长度最短(即经过的边数最少)的那条路径叫做最短路径,其路径长度叫做最短路径长度或最短距离。
对于带...
分类:
编程语言 时间:
2014-12-29 15:25:03
阅读次数:
273
这道题很容易想到状压dp,首先跑一遍floyd求出各个点之间的最短路,然后dp。
状态是dp[i][j]表示状态为i(二进制,表示是否访问过每个点),在位置j时的最短路。
转移就是:dp[i][j]=min(dp[i-(1<<v)][u]+grid[u][v],dp[i][j]),其中v是当前位置,u是上一个状态的位置。
需要注意的是dp的顺序应该是由含1的个数少的二进制到1的个数高的二进制;由于最开始就在0位置,所以dp[(1<<n)-1][0]不可能被转移到,所以最后的答案应该是ans=min(ans,...
分类:
其他好文 时间:
2014-12-26 20:22:01
阅读次数:
260