摘要: 题目的意思是选择路径并使从 i 到 j 的路径上最小承受重量最大化。动态规划,类似floyd,用dist[i ][ j]表示从 i 到 j 的最小重量,枚举中间节点 k ,则状态转移方程可写为dist[ i ][ j ] = max ( dist[ i ] [ j ], min ( dist[ i ][ k ],dist[ k ][ j ]))。index为命名函数,将英文名转换为标号。#include #include #define INF 5000000int n,r,num,dist[300][300];char city[300][50];char start[50],dest[50 阅读全文
posted @ 2013-08-14 15:39 贝尔摩德 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 题意是有n个国家,求从某点到某点运输的最小费用,且中间经过的点需要收税,还按字典序要打印出路径。floyd算法多加上枚举点的税即可。path[i ][j ]记录从i到j的第一个节点,当有相等的情况时比较两种path即可按字典序输出。#include #define INF 10000000int dist[1010][1010],n,path[1010][1010],b[1010];void floyd(){ int k,i,j,t; for(i=1;ipath[i][k]) path[i][j]=path[i][k]; } }} int main(){ in... 阅读全文
posted @ 2013-08-14 14:27 贝尔摩德 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 题目大意是有n个国家之间的汇率,问是否存在从一个国家出发回到该国家后汇率乘积大于一,即套汇。可以用bellman做,因为是回路,所以要递推n次(多于n次无意义,因为若存在套汇,n次就知道了)。也可以用floyd算法,最后判断lowdist[i ][i ]即可。#include #include int n,m,flag;double maxdist[50];char name[50][20],a[20],b[20];struct exchange{ int ci; int cj; double cij;}ex[1000];void bellman(int u){ int i,j; memset 阅读全文
posted @ 2013-08-14 10:56 贝尔摩德 阅读(166) 评论(0) 推荐(0) 编辑