POJ 3311 Hie with the Pie
来源:互联网 发布:java源代码怎么运行 编辑:程序博客网 时间:2024/06/05 15:44
【题意】类似于旅行商问题,只是每个点可以走多次,比经典TSP问题不同的是要用弗洛伊德的时候。求最短距离。
【解析】可以用全排列做,求出一个最短的距离即可。或者用状压dp,用一个二进制数表示城市是否走过。
【状态表示】dp【state】【i】表示到达i点状态为state的最短距离。
【状态转移】dp[state][i]=min(dp[state][i],dp[state'][j]+dis[j][i]),dis[j][i]为j到i的最短距离。
【DP边界条件】dp【state】【i】=dis【0】【i】,state是只经过i的状态。
#include <stdio.h>#include <string.h>#include <assert.h>#include <limits.h>#include <iostream>using namespace std;#define inf 0x3f3f3f3fint dis[12][12];int dp[1<<11][12];//dp[sta][i]int n;int main(){ while(~scanf("%d",&n)) { if(n==0)return 0; for(int i=0;i<=n;i++) { for(int j=0;j<=n;j++) { scanf("%d",&dis[i][j]); } } for(int k=0;k<=n;k++) for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) if(dis[i][k]+dis[k][j]<dis[i][j]) dis[i][j]=dis[i][k]+dis[k][j]; for(int s=0;s<=(1<<n)-1;s++)//枚举所有的状态 { for(int i=1;i<=n;i++) { if(s&(1<<(i-1)))//s中已经经过城市i { if(s==(1<<(i-1))) dp[s][i]=dis[0][i];//状态s只经过城市i,dp边界 else { dp[s][i]=inf; for(int j=1;j<=n;j++) { if(s&(1<<(j-1))&&j!=i) dp[s][i] = min(dp[s][i],dp[s^(1<<(i-1))][j]+dis[j][i]); } } } } } int ans=dp[(1<<n)-1][1]+dis[1][0]; for(int i=2;i<=n;i++) { if(dp[(1<<n)-1][i]+dis[i][0]<ans) ans = dp[(1<<n)-1][i]+dis[i][0]; } printf("%d\n",ans); } return 0;}
1 0
- poj 3311 Hie with the Pie
- POJ 3311 Hie with the Pie
- poj 3311 Hie with the Pie
- poj 3311 Hie with the Pie
- poj 3311 Hie with the Pie (TSP)
- POJ 3311 — Hie with the Pie
- POJ 3311 Hie with the Pie
- poj 3311 Hie with the Pie (DP)
- POJ 3311 Hie with the Pie
- POJ 3311 Hie with the Pie
- POJ - 3311 Hie with the Pie
- POJ 3311 - Hie with the Pie
- POJ 3311 Hie with the Pie
- POJ 3311 Hie with the Pie
- Hie with the Pie POJ
- Hie with the Pie POJ
- Hie with the Pie POJ
- POJ 3311 Hie with the Pie(Floyd+状态压缩DP)
- windows和ubuntu下乱码问题
- 慕课网AngularJS实战课程笔记
- UITableView的常用代理方法
- EclEmma 代码覆盖测试工具分析
- 获取系统相册,并保存文件
- POJ 3311 Hie with the Pie
- 第六周实践项目2————设计武器类
- Linux C线程同步
- 我所理解的OOP——UML六种关系
- Servlet的生命周期
- Guava - EventBus(事件总线)
- JavaScript/JQuery] AJAX机制详解以及跨域通信
- 冒泡排序PHP实现
- 自定义带动画效果的ProgressBar