http://poj.org/problem?id=1062

一个中文题,一个多月之前我做过,当时我是用搜索写的,不过苦于卡在无法确定等级关系,所以就错了。

看了别人的博客后,我还是不是很理解所谓的枚举等级是怎样枚举,因为我觉得在递归的时候,我真的不知道怎么枚举等级。

然后今天在看到了一个人写的,枚举等级怎么枚举,我才发现我用那个搜索写的话,我还是有问题。所以我就用这个新学的dijkstra写

所谓的枚举等级,就是以每一个等级都视为最低等级来进行枚举。

比如等级限制1,而那个酋长的等级是3,那么你就应该枚举2-4,和3-5的等级的人。

 #include <stdio.h>
#include <string.h> #define inf 9999999 int m,n;
int price[],d[];
int graph[][];
int rank[];
bool mark[],limit[]; int dijkstra()
{
int result = inf;
int k,dis;
memset(mark,false,sizeof(mark));
d[ ] = ;
for(int i = ; i <= n ; i++)
d[ i ] = inf;
for(int i = ; i <= n ; i++) //dijkstra是这个循环
{
k = ;
dis = inf;
for(int j= ; j <= n ;j++)
if(!mark[ j ] && d[ j ] <= dis && limit[ j ])
{
k = j;
dis = d[ j ];
}
mark[ k ] = true;
for(int j = ; j <= n ; j++)
{
if(limit[ j ] && d[ j ] > d[ k ] + graph[ k ][ j ])
d[ j ] = d[ k ] + graph[ k ][ j ];
}
}
for(int i = ;i <= n ;i++)
{
d[ i ] += price[ i ]; //d[i] 是存储着交换i次后的价钱。
if(d[ i ] < result)
result = d[ i ];
}
return result;
} int main()
{
int x,t,v,ans = inf;
scanf("%d%d",&m,&n);
for(int i = ; i <= n ; i++) //进行构图。
for(int j = ;j <= n ; j++)
if( i == j )
graph[ i ][ j ] = ;
else
graph[ i ][ j ] = inf;
for(int i = ; i <= n ; i++)
{
scanf("%d%d%d",&price[i],&rank[i],&x);
for(int j = ; j < x ; j++)
{
scanf("%d%d",&t,&v);
graph[ i ][ t ] = v;
}
}
for(int i = ; i <= m ; i++) //这里就是枚举等级,把可以和酋长交换的人进行标记,然后进行最短路的寻找。
{
memset(limit,,sizeof(limit));
for(int j = ; j <= n ; j++)
if(rank[ j ] >= rank[ ] - m + i && rank[ j ] <= rank[ ] + i)
limit[ j ] = true;
t = dijkstra();
if(ans > t)
ans = t;
}
printf("%d\n",ans);
return ;
}

最新文章

  1. 【WPF】 返回随机颜色,Random r= new Random() 不能放在函数里!
  2. Oracle sql连接
  3. jQuery-1.9.1源码分析系列(二)jQuery选择器续1
  4. 输入参数是NSDate,输出结果是星期几的字符串
  5. 如何替换orcl实例下的四个数据库
  6. iphone判断当前网络连接类型
  7. js初学必知三重点
  8. JSP的学习(7)——九大隐式对象之pageContext对象
  9. mysql只导出表结构或数据
  10. Nancy和MVC的简单对比
  11. SUSE Linux 下redis 的坑
  12. 我的Python学习笔记(四):动态添加属性和方法
  13. POJ 3171 Cleaning Shifts
  14. CSS实现动画特效导航栏
  15. automapper demo
  16. 省市区三级联动,JS实现
  17. linux删除文件后不释放磁盘的问题
  18. numpy常见属性、创建数组
  19. WordPaster-UEditor1.x整合教程
  20. POJ2229--Sumsets(动态规划)

热门文章

  1. string.replace正则表达式说明
  2. zabbix安装全过程
  3. Nginx负载均衡配置实例详解(转)
  4. JavaScript 五种(构造方式)继承
  5. java批量生成excel代码分享
  6. Linux服务器管理: 系统的进程管理终止进程kill命令
  7. EF上下文管理
  8. Request 传值 遇到的中文乱码问题
  9. jquery Ajax跨域调用WebServices方法
  10. 今天微信群需要人家通过吗?是微信bug吗