HDU 3001 三进制状压DP

N个城市,M条道路,每条道路有其经过的代价,每一个城市最多能够到达两次,求走全然部城市最小代价,起点随意。

三进制状压。存储每一个状态下每一个城市经过的次数。

转移方程: dp[i+b[k]][k]=Min(dp[i+b[k]][k],dp[i][j]+dis[j][k]);

#include "stdio.h"
#include "string.h"const int inf=0x3f3f3f3f;int b[15],mark[60010][15],dp[60010][15],dis[15][15];
int Min(int a,int b)
{if (a<b) return a;else return b;
}
int main()
{int i,j,n,m,k,temp,ans,flag;b[0]=1;for (i=1; i<=10; i++)b[i]=b[i-1]*3;for (i=0; i<b[10]; i++) // 记录每种状态下,每一个城市经过的情况。

{ temp=i; for (j=0; j<10; j++) { mark[i][j]=temp%3; temp/=3; } } while (scanf("%d%d",&n,&m)!=EOF) { memset(dis,inf,sizeof(dis)); memset(dp,inf,sizeof(dp)); while (m--) { scanf("%d%d%d",&i,&j,&k); i--; j--; if (dis[i][j]>k) dis[i][j]=dis[j][i]=k; } for (i=0; i<n; i++) dp[b[i]][i]=0; ans=inf; for (i=0; i<b[n]; i++) { flag=1; for (j=0; j<n; j++) { if (mark[i][j]==0) flag=0; if (dp[i][j]==inf) continue; for (k=0; k<n; k++) if (k!=j && mark[i][k]<2 && dis[j][k]!=inf) dp[i+b[k]][k]=Min(dp[i+b[k]][k],dp[i][j]+dis[j][k]); } if (flag==1) for (j=0; j<n; j++) ans=Min(ans,dp[i][j]); } if (ans==inf) printf("-1\n"); else printf("%d\n",ans); } return 0; }

posted on 2017-06-11 09:00 mthoutai 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/mthoutai/p/6984255.html

HDU 3001 三进制状压DP相关推荐

  1. HDU-3001(旅行商问题+三进制状压dp)

    #include <bits/stdc++.h> using namespace std; /* 题目大意: 给定n个点m条边的带权无向图,问有没有可能从n个点的其中一个出发,走遍其余n ...

  2. 涂抹果酱(三进制状压dp)

    涂抹果酱(状压dp) 题目描述 输入描述: 输出描述: 示例 输入 输出 说明 备注: 题目思路: 代码 欢迎关注微信公众号:Java后台开发 题目描述 Tyvj两周年庆典要到了,Sam想为Tyvj做 ...

  3. HDU 3001 Travelling (三进制状压dp)

    题意 n(n<=10)n(n个城市,知道每个城市间的旅行费用,但每个城市最多走两遍.问最小花费是多少 . 也就是每个城市可以走两次的tsp问题. 分析 最多走两次,三进制0 1 2可满足,即用三 ...

  4. Travelling (三进制+状压dp)

    题目链接 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 inline ll rea ...

  5. hdu3001(三进制状压)

    题目大意: 现在给你一个有n个点和m条边的图,每一条边都有一个费用,每个点不能经过超过两次,求所有点至少遍历一次的最小费用 其中n<=10 m没有明确限制(肯定不会超过1e5) 一看到这个数据范 ...

  6. 三进制状压动态规划【涂抹果酱】 题解

    前言:好不容易搞懂了这道题,感觉网上能找到的题解在我有疑问的地方都讲的不是很细,所以我来写一篇吧. 题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M ...

  7. Tunnels HDU - 4856 (bfs状压dp)

    Tunnels HDU - 4856 Bob is travelling in Xi'an. He finds many secret tunnels beneath the city. In his ...

  8. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  9. Hdu 4856 Tunnels(状压dp)

    题目链接 Tunnels Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

最新文章

  1. C语言中文件的读写(fputc和fgetc)(putchar和getchar)
  2. go 一个文件引进另一个文件_一个浏览 GitHub 文件的神操作!
  3. 评分卡模型剖析之一(woe、IV、ROC、信息熵)
  4. 看了一个月c能学java_学过一点C语言的可以自学java吗?应该怎样开始?
  5. 【算法学习】堆排序(Heap Sorting)
  6. Spring4.x()--注解通知的写法
  7. vue中的自定义分页插件组件
  8. 程序员要学点儿理财知识,而不仅仅是代码技巧
  9. 转: Rust中的Pin详解 【Rust语言中文社区】
  10. PHP留言板之提交留言
  11. qq最低Android版本,QQ精简版官方下载-QQ精简版低内存apkv3.2.0.361 安卓版-腾牛安卓网...
  12. 小甲鱼 OllyDbg 教程系列 (十四) : 模态对话框 和 非模态对话框 之 URlegal 和 movgear...
  13. Java随机产生两位数正整数
  14. python import文件后 core dumped_python numpy包调用core dumped、Linux VDSO机制
  15. python贴吧数据可视化软件_Python数据可视化工具之Pyecharts初体验
  16. 水晶苍蝇拍(14):战胜人性,值得珍藏的投资感悟!
  17. hdu 1789 贪心算法
  18. 临沂大学计算机网络期末考试题,临沂大学2019版计算机网络实验指导书.pdf
  19. 如何将微信素材库的文章保留格式的复制到自己的博客论坛或者其他素材库
  20. 086 定积分应用元素法求面积

热门文章

  1. 图像语义分割 -- UNET++
  2. 漫步最优化二十八——三次插值法
  3. 图像基础知识 —— Opencv图像处理
  4. Math3中StatUtils类和MathArrays的使用(数组运算)
  5. vba判断文件是否存在的两种方法
  6. 哈夫曼编码(Huffman Coding)
  7. 大数据 数据库 评测_为什么腾讯QQ的大数据平台选择了这款数据库?
  8. 打不开/dev/vmmon:断裂管道_湖北加工管道式自卸除铁器厂家询价咨询_国凯环保设备...
  9. mysql日期代码_mysql日期查询操作代码
  10. java 线程钩子_高级并发编程系列六(线程池钩子函数)