【OpenJudge 4124】海贼王之伟大航路(DP DFS)
来源:互联网 发布:sql insert嵌套select 编辑:程序博客网 时间:2024/04/28 16:25
海贼王之伟大航路
OpenJ_Bailian - 4124两种解法:
第一种用DFS,用一个record数组保存每个状态最优解,大于这个值就剪枝不搜了。
#include<bits/stdc++.h>#define INF 0X3f3f3f3f#define LL long longusing namespace std;int n,a[20][20],ans,book[20],step,record[20][1<<15],weight[20],pos;//record[i][j]表示通过j状态到达i岛时的最优路径,经过一个岛就加上那个岛的weight值。pos表示当前状态。void dfs(int cur,int now) //cur是已经去过的岛的数目,now是现在在哪个岛{ if(cur+2 == n) { step += a[now][n]; if(step < ans) ans=step; step -= a[now][n]; return; } if(step>ans) return; for(int i = 2; i < n; ++i) { if(!book[i]) { if(record[i][pos+weight[i]] <= step+a[now][i]) continue; step += a[now][i]; pos += weight[i]; book[i] = 1; record[i][pos] = step; dfs(cur+1,i); step -= a[now][i]; pos -= weight[i]; book[i] = 0; } } return;}int main(){ for(int i = 1; i <= 16; ++i) weight[i] = 1 << i; while(~scanf("%d",&n)) { pos = step = 0; ans = INF; memset(book,0,sizeof book); memset(record,INF,sizeof record); for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) scanf("%d",&a[i][j]); dfs(0,1); printf("%d\n",ans); } return 0;}
阅读全文
0 0
- 【OpenJudge 4124】海贼王之伟大航路(DP DFS)
- OpenJudge 海贼王之伟大航路 DFS+状态压缩
- 海贼王之伟大航路(DFS)
- openjudge 海贼王之伟大航路 状态压缩dp
- openjudge 海贼王之伟大航路
- Openjudge:4979:海贼王之伟大航路
- OpenJudge 4124 海贼王之伟大航路 深搜剪枝
- [OpenJ_Bailian - 4124 海贼王之伟大航路] DFS+二进制状态压缩 / 状压DP
- poj 4124:海贼王之伟大航路
- openjudge百练4124 海贼王之伟大航路 解题记录
- 使用二进制进行DFS 海贼王之伟大航路
- OpenJudge_P4979 海贼王之伟大航路(状态压缩DP)
- dp tsp问题 海贼王之伟大航路
- 百练 4124 海贼王之伟大航路
- 海贼王之伟大航路解题报告
- openjudge 海贼王之伟大航路(luoge.cpp/1000ms/128M)
- DFS 简单的剪枝和状态压缩 海贼王之伟大航路
- ACM 海贼王之伟大航路(深搜剪枝)
- 方法传参
- HDU
- POJ 1067 取石子游戏 威佐夫博弈
- 乘法逆元: 扩展欧几里德 费马小定理 递推 带余数同余式的一般解法
- TCP报文丢失
- 【OpenJudge 4124】海贼王之伟大航路(DP DFS)
- 刷题打卡1 poj1543 ,poj1006,poj1013
- idea+maven+ssm搭建基本项目
- tensorflow学习:tf.nn.softmax_cross_entropy_with_logits()
- 8月9日训练笔记
- es6新特性概览
- mysql 远程访问配置
- log4j打印mybatis执行sql,将占位符换成真实的参数输出
- java 数组