多段图的最短路问题 。  运用了非常多的技巧 :如 记录字典序最小路径 。

细节參见代码:

#include<bits/stdc++.h>
using namespace std;
const int INF = 2000000000;
int m,n,a[15][105],d[15][105],next_[15][105];
int main() {
while(~scanf("%d%d",&m,&n)) {
for(int i=0;i<m;i++)
for(int j=0;j<n;j++) scanf("%d",&a[i][j]);
int ans = INF,first = 0;
for(int j=n-1;j>=0;j--) {
for(int i=0;i<m;i++) {
if(j == n-1) d[i][j] = a[i][j]; //边界
else {
int rows[3] = {i,i-1,i+1};
if(i==0) rows[1] = m-1;
if(i==m-1) rows[2] = 0;
sort(rows,rows+3); //又一次排序,以便找到字典序最小的
d[i][j] = INF;
for(int k=0;k<3;k++) {
int v = d[rows[k]][j+1] + a[i][j];
if(v < d[i][j]) { d[i][j] = v; next_[i][j] = rows[k]; }
}
}
if(j==0&&d[i][j]<ans) { ans = d[i][j]; first = i; } //在最后一列确定最大值以及第一列的行数答案
}
}
printf("%d",first+1);
for(int i=next_[first][0],j=1;j<n;i=next_[i][j],j++) printf(" %d",i+1);
printf("\n%d\n",ans);
}
return 0;
}

最新文章

  1. NetBeans建立跳过测试构建的快捷方式
  2. Java中的可变长参数
  3. IE8+兼容经验小结
  4. iOS经典面试题总结--内存管理
  5. 快速入门系列--MVC--05行为
  6. Meta标签实现阻止移动设备(手机、Pad)的浏览器双击放大网页
  7. MathType 常用快捷键
  8. 让delphi解析chrome扩展的native应用
  9. iOS开发获取本机手机号码
  10. html5学习测试
  11. poj: 3253
  12. Cookie设置HttpOnly,Secure,Expire属性
  13. mysql 存储过程中的declare 和 set @的两种变量的区别
  14. 风萧萧兮易水寒 coding一去兮不复还
  15. xml动态修改 dom4j修改
  16. Python实现简易端口扫描器
  17. 衡量GDP,哪种夜间灯光数据更靠谱?
  18. jquery 表单序列化
  19. centos install jdk
  20. 【CSS学习】--- overflow属性

热门文章

  1. redis常用监控命令
  2. 3.1 Java以及Lucene的安装与配置
  3. c#网络编程-第一章
  4. MFC 在窗口上画指定大小的ICON
  5. C语言浮点数存储方式
  6. 关于__GNU_SOURCE 这个宏---如何开启【转】
  7. windows 中使用hbase 异常:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
  8. 【linux高级程序设计】(第十五章)UDP网络编程应用 2
  9. 第二部分:Spring中配置mongodb
  10. poj 1981(单位圆覆盖最多点问题模板)