poj 4124:海贼王之伟大航路
4124:海贼王之伟大航路
- 查看
- 提交
- 统计
- 提示
- 提问
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
“我是要成为海贼王的男人!”,路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的艰险历程。
路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着“唯一的大秘宝”——ONE PIECE)。而航程中间,则是各式各样的岛屿。
因为伟大航路上的气候十分异常,所以来往任意两个岛屿之间的时间差别很大,从A岛到B岛可能需要1天,而从B岛到A岛则可能需要1年。当然,任意两个岛之间的航行时间虽然差别很大,但都是已知的。
现在假设路飞一行从罗格镇(起点)出发,遍历伟大航路中间所有的岛屿(但是已经经过的岛屿不能再次经过),最后到达拉夫德鲁(终点)。假设他们在岛上不作任何的停留,请问,他们最少需要花费多少时间才能到达终点?
- 输入
-
输入数据包含多行。
第一行包含一个整数N(2 < N ≤ 16),代表伟大航路上一共有N个岛屿(包含起点的罗格镇和终点的拉夫德鲁)。其中,起点的编号为1,终点的编号为N。
之后的N行每一行包含N个整数,其中,第i(1 ≤ i ≤ N)行的第j(1 ≤ j ≤ N)个整数代表从第i个岛屿出发到第j个岛屿需要的时间t(0 < t < 10000)。第i行第i个整数为0。 - 输出
- 输出为一个整数,代表路飞一行从起点遍历所有中间岛屿(不重复)之后到达终点所需要的最少的时间。
- 样例输入
-
样例输入1: 4 0 10 20 999 5 0 90 30 99 50 0 10 999 1 2 0样例输入2: 5 0 18 13 98 8 89 0 45 78 43 22 38 0 96 12 68 19 29 0 52 95 83 21 24 0
- 样例输出
-
样例输出1: 100样例输出2: 137
- 提示
-
提示:
对于样例输入1:路飞选择从起点岛屿1出发,依次经过岛屿3,岛屿2,最后到达终点岛屿4。花费时间为20+50+30=100。
对于样例输入2:可能的路径及总时间为:
1,2,3,4,5: 18+45+96+52=211
1,2,4,3,5: 18+78+29+12=137
1,3,2,4,5: 13+38+78+52=181
1,3,4,2,5: 13+96+19+43=171
1,4,2,3,5: 98+19+45+12=174
1,4,3,2,5: 98+29+38+43=208
所以最短的时间花费为137
单纯的枚举在N=16时需要14!次运算,一定会超时。 -
#include<iostream> #include<cmath> #include<cstring> #include<algorithm> #include<iomanip> #include<queue> #include<stack> #include<vector> #include<set> #include<map> using namespace std; int a[25][25]; int n; int ans=0x7fffffff/2; bool tag[16][1<<16]; int bj[16][1<<16]; void dfs(int cur,int state,int s) {tag[cur][state]=true;bj[cur][state]=s;if(cur==(n-1)&&state!=((1<<n)-1)) return;if(s>=ans) return;if(cur==(n-1)&&state==((1<<n)-1)){ans=min(ans,s);return;}for(int i=0;i<n;++i){if(!(state&(1<<i))&&(!tag[i][(state|(1<<i))]||bj[i][(state|(1<<i))]>s+a[cur][i])){dfs(i,state|(1<<i),s+a[cur][i]);}} } int main() {memset(tag,0,sizeof(tag));cin>>n;for(int i=0;i<n;++i){for(int j=0;j<n;++j){cin>>a[i][j];}}dfs(0,1,0);cout<<ans<<endl;return 0; }
poj 4124:海贼王之伟大航路相关推荐
- bailianoj 4124海贼王之伟大航路
bailianoj 4124海贼王之伟大航路 题目大意 以第一个岛为起点,最后一个岛为终点.问从第一个岛到最后一个岛所需要的的最短时间是多少.其中岛i到岛i所需花费的时间为0,岛i岛到j的时间和岛j到 ...
- 北京大学OpenJudge 4124:海贼王之伟大航路
4124:海贼王之伟大航路 总时间限制: 1000ms 内存限制: 65536kB 描述 "我是要成为海贼王的男人!",路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的 ...
- POJ h0248.海贼王之伟大航路
海贼王之伟大航路 "我是要成为海贼王的男人!",路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的艰险历程. 路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿 ...
- 18.06.27 POJ百练 4124海贼王之伟大航路
描述 "我是要成为海贼王的男人!",路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的艰险历程. 路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着" ...
- OpenJudge 4124 海贼王之伟大航路 深搜剪枝
Description "我是要成为海贼王的男人!",路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的艰险历程. 路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那 ...
- 源哥每日一题第十三弹 百练4124:海贼王之伟大航路 状压dp
连接:http://bailian.openjudge.cn/practice/4124 题意:从1到n走过所有点恰好一次最短时间.乱搞的话会完美的超时(阶乘级别的复杂度,虽然范围很小,但是也足够超时 ...
- 百练4124:海贼王之伟大航路
路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着"唯一的大秘宝"--ONE PIECE).而航程中间,则是各式各样的岛屿. 因为伟大航路上的气候十分异常,所以来往任意 ...
- POJ 4979 海贼王之伟大航路 【状压dp】【北大ACM/ICPC竞赛训练】
该死的题让我想起来艾斯之死... 首先想到dp(i)代表从1到[i表示的这些岛屿]所花的最小时间,然后每次枚举最后一个岛屿以此缩小范围,但发现枚举了最后一个岛屿后没有办法转移,因为不知道倒数第二个岛屿 ...
- 百练4124:海贼王之伟大航路(状压DP)
题目来源:http://bailian.openjudge.cn/practice/4124/ 4124:海贼王之伟大航路 总时间限制: 1000ms 内存限制: 65536kB 描述 " ...
最新文章
- 初探系列 — Pharbers用于单点登录的权限架构
- pycharm如何查找程序项目中所有断点?
- 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和
- ABAP BSP的工具类CL_BSP_UTILITY
- visual studio installer可以卸载吗_ArcGIS 怎样彻底删除和卸载
- 重磅!DigiX极客校园大赛今日启动,超百万巨奖激励AI精英!
- vector内存分配和回收机制
- 中国武术和泰拳的对抗史
- python基于pip和conda配置国内安装源,提升下载安装性能
- java常用数据结构有哪些
- 注册测绘师 案例分析
- linux创建2g文件,嵌入式 创建一个2G的空文件(Linux命令dd)
- android 微博 登录,Android第三方登录之微博登录
- 智能营销增益模型(Uplift Modeling)实践整理
- 利用Python+xarray+cartopy+matplotlib 实现遥感地形图制图绘制 —— xarray 学习文档01
- 怎样在PLSQL Developer14(64bit)当中找到汉化版本?
- java root权限_Android应用获取Root权限
- 科研教育「双目视觉技术」首选!维视MV-VS220双目立体视觉系统开发平台
- 金融数据治理者视角:小微信用体系建设的进化路径
- 国内大陆有哪些芯片公司处于世界前10?一起看看!
热门文章
- 如何通过ssh远程访问Unix/Linux服务器上的html
- 编写一个c语言程序 杨辉三角,杨辉三角 c语言
- 成都的IT研发产业和芯片产业等情况:2006年初的数据。
- 马自达化身杠精?老子就是不用触摸屏!
- 又闹分裂?Node.js 被 fork 出一个项目 Ayo.js
- python100day day22 -Requests
- 致命错误: Call to undefined function mb_detect_encoding()
- mysql 嵌套查询性能_MySQL数据库之嵌套查询与连接查询的性能详解
- 【leetcode】脑子打结的题
- 利用计算机辅助设计,一种利用计算机辅助设计和制作手工栽绒毯的方法