题目大意

一次旅游,经过所有城市至少一次,并且任何一座城市访问的次数不能超过两次,求最小费用

每个城市最多访问两次,用状态0,1,2标识访问次数

把城市1~N的状态按照次序连接在一起,就组成了一个三进制数,所有N个城市的状态都能对应到一个三进制数,对一个状态而言,已经访问的城市不关心它的访问的顺序是怎样的,只要知道到达了这个状态,最后访问是哪一个城市就可以进行转移了,

于是定义状态dp[i][j]标识N个城市处于i的状态,最后一个城市是j所需要的最小费用,

状态转移方程可以是

dp[i+3^i][v]=min(dp[i+3^i][v],dp[i][j]+cji)

每个状态初始化为无穷,标识这个状态未被访问到,根据题意,可以选择任意一个城市为出发点,初始化dp[3^j][j]==0标识从任意一个城市出发所需的代价为0,

外层循环i 从 1 to3^N 保证,每个状态计算到

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[60000][11];
#define gets(i,j) (i/len[j])%3
int c[20][20];
int len[11];
int main(){
len[0]=1;
for(int i=1;i<=10;i++){ //计算3^i保存在len[i]中
len[i]=len[i-1]*3;
}
int n,m,f,u,v,a,b,w,ans;
while(scanf("%d%d",&n,&m)!=EOF){
memset(c,0x3f,sizeof(c));//初始化任意城市间的道路距离为无穷
memset(dp,0x3f,sizeof(dp));//初始化所有状态为无穷,表示该状态还未到达
for(int i=0;i<m;i++){
scanf("%d%d%d",&a,&b,&w);
a--;b--; //城市编号从0---n-1
c[a][b]=c[b][a]=min(c[a][b],w); //a,b间区所有道路的是最小值
}
ans=dp[0][0];
for(int i=0;i<n;i++){
dp[len[i]][i]=0;
}
for(int i=1;i<len[n];i++){
f=1;
for(int j=0;j<n;j++){
if(gets(i,j)==0){ //表示城市j在状态i下未被访问
f=0;continue;
}
for(int v=0;v<n;v++){
//城市在状态i下被访问过两次,不能再访问
if(gets(i,v)==2){
continue;
}
u=i+len[v];
dp[u][v]=min(dp[u][v],dp[i][j]+c[j][v]);
}
}
if(f){
//第i个城市满足旅行的条件,取该情况下最小费用
for(int j=0;j<n;j++){
ans=min(ans,dp[i][j]);
}
}
}
if(dp[0][0]==ans){
ans=-1;
}
printf("%d\n",ans);
}
return 0; }

  

Hdu 3001 Travelling 状态DP的更多相关文章

  1. hdu 3001 Travelling(状态压缩 三进制)

    Travelling Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. HDU - 3001 Travelling 状压dp + 三进制 [kuangbin带你飞]专题二

    终于刷完搜索专题了. 题意:给定n个城市,每个城市参观不能超过两次,两个城市之间有道路通过需要花费X,求通过能所有城市的最小花费. 思路:每个城市有三个状态0,1,2,可用三进制存储所有城市的访问状态 ...

  3. HDU 3001 状压DP

    有道状压题用了搜索被队友骂还能不能好好训练了,, hdu 3001 经典的状压dp 大概题意..有n个城市 m个道路  成了一个有向图.n<=10: 然后这个人想去旅行.有个超人开始可以把他扔到 ...

  4. hdu 4614 pieces 状态DP

    题意:给你一个长度小于等于16的字符串,每次可以删除一个回文传,问你最少删除干净的字数. 状态+dp dp[i] = min(dp[i],dp[j]+dp[j^i]);(j是i的字串): 连接:htt ...

  5. Hdu 4539 【状态DP】.cpp

    题意: 一个炮兵可以攻打和他之间曼哈顿距离为2的士兵,给出你一块n*m的战场,告诉你哪些地方可以站人哪些地方不可以,问你最多可以安放多少个士兵? n <= 100, m <= 10 思路: ...

  6. HDU 3001 Travelling(状态压缩DP+三进制)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 题目大意:有n个城市,m条路,每条路都有一定的花费,可以从任意城市出发,每个城市不能经过两次以上 ...

  7. HDU 3001 Travelling (三进制状态压缩 DP)

    题意:有 n 个city,能够选择任一城市作为起点,每一个城市不能訪问超过2次, 城市之间有权值,问訪问所有n个城市须要的最小权值. 思路:由于每一个城市能够訪问最多两次,所以用三进制表示訪问的状态. ...

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

    Travelling After coding so many days,Mr Acmer wants to have a good rest.So travelling is the best ch ...

  9. HDU 3001 Travelling 3进制状压dp

    题意:10个点,若干条边,边有花费,每个点最多走两次,求走过所有点,花费最少 分析:因为每个点最多走两次,所以联想到3进制,然后枚举状态,就行了(我也是照着网上大神的代码写的) #include &l ...

随机推荐

  1. node.js搭建Web服务器

    Node.js 博客搭建 一. 学习需求 Node 的安装运行 会安装node,搭建node环境 会运行node. 基础模块的使用 Buffer:二进制数据处理模块 Event:事件模块 fs:文件系 ...

  2. SSIS - 10.执行过程任务

    一.创建批处理文件 在SSIS包中,执行过程任务可以用来运行应用程序或批处理文件.它执行时用到的输入.输出和参数可以在任务编辑器中进行设置. 在使用执行过程任务之前,我们需要先创建一个批处理文件,实现 ...

  3. [.net 面向对象程序设计深入](36)Redis——基础

    [.net 面向对象程序设计深入](36)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...

  4. 依赖注入[4]: 创建一个简易版的DI框架[上篇]

    本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章(<控制反转>.<基于IoC的设计模式>和< 依赖注入模式>)从纯理论的角度 ...

  5. Batch入门教程丨第一章:部署与Hello World!(下)

    在上期分享的内容中,我们已经掌握了基础理论知识,今天我们将继续了解和学习与Windows Batch有关的知识和编程方法,如何编写和运行Windows Batch程序,脚本语言的入门方式等,从而能够更 ...

  6. 一个完整的 Web 请求到底发生了什么

    阅读本文大概需要 7 分钟. 一.从输入一个网址开始 当我们在浏览器输入一个网址,然后按下回车,接下来浏览器显示了页面.网速好的话这之间可能就一秒,但在这一秒内到底发生了什么? 本文主要内容是试图记录 ...

  7. [Swift]LeetCode51. N皇后 | N-Queens

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  8. [Swift]LeetCode762. 二进制表示中质数个计算置位 | Prime Number of Set Bits in Binary Representation

    Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a prime ...

  9. 面试题:反转字符串(leetcode344)

    编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. 你可以 ...

  10. idea设置代码颜色主题(同Sublime Text 3的代码颜色一样)

    1.下载主题的网址:http://color-themes.com,主题种类多,总有适合你的主题.在这个网址下载的主题是jar文件,直接导入,如下图file->import  Setting,找 ...