状态压缩dp的第一题!

题意:Mr ACMer想要进行一次旅行,他决定访问n座城市。Mr ACMer 可以从任意城市出发,必须访问所有的城市至少一次,并且任何一个城市访问的次数不能超过2次。n座城市间有m条道路,每条道路都有一个费用。求Mr ACMer 完成旅行需要花费的最小费用。如果不能完成旅行,则输出-1。

由于城市可以最多被访问两次,所以我们用3进制数来状态压缩,每一位可以存在0,1,2这三个数。因此,如果表示状态的数在这n位上每一位都大于等于1,则就是符合题意的解,我们要从这些解中遴选出

最小花费。所以,这道题看起来是一个多起点多终点的dp,然而,我们可以把他的起点城市看成是他拜访的第1个城市,最开始这位旅行家是不在任何城市的,他抵达第1个城市的费用是0。

这样就是一个固定起点,多终点的dp了;

那么我们定义dp[i][j]---->表示到达状态(i,j)时的最小费用,其中i是我用来表示当前城市造访情况的编码数,而j表示的是我们最后造访的一个城市。

这里采用刷表法来进行状态的更新,所谓“刷表法”是指的用当前状态来更新当前状态可能影响得到的后续状态,即现在的状态值已知;

而“填表法”指的是用已经算出的所有子状态来计算现在的状态,即现在状态未知,要靠已知来计算。

刷新方程:dp[i+3v][v] = min(dp[i+3v][v],dp[i][j]+cost[v][j]);

AC时间:2270ms,有点慢。

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#define F 0x3f
#define INF 0x3f3f3f3f
#define maxn 60000
using namespace std;
int dp[maxn][];
int cost[][];
int carrys[];
int main()
{
int n,m;
carrys[] = ;
for(int i = ;i <= ;++i) carrys[i] = * carrys[i - ];
while(scanf("%d%d",&n,&m) == ){
memset(dp,F,sizeof(dp));
memset(cost,F,sizeof(cost));
int start,over,spend;
for(int i = ;i < m;++i){
scanf("%d%d%d",&start,&over,&spend);
--start,--over;
cost[start][over] = cost[over][start] = min(cost[start][over],spend);
}
for(int i = ;i < ;++i) dp[carrys[i]][i] = ;
int answer = INF;
for(int i = ;i <= carrys[] - ;++i){
bool is_qualified = true;
for(int j = ;j < n;++j){
if((i / carrys[j]) % == ) is_qualified = false;
}
for(int j = ;j < n;++j){
for(int k = ;k < n;++k){
if(k != j && (i / carrys[k]) % < ){
int u = i + carrys[k],v = k;
dp[u][v] = min(dp[u][v],dp[i][j] + cost[v][j]);
}
}
}
if(is_qualified){
for(int j = ;j < n;++j) answer = min(answer,dp[i][j]);
}
}
printf("%d\n",answer >= INF ? - : answer);
}
return ;
}

HDU 3001(状态压缩dp)的更多相关文章

  1. HDU 1074 (状态压缩DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...

  2. HDU 3341 状态压缩DP+AC自动机

    题目大意: 调整基因的顺序,希望使得最后得到的基因包含有最多的匹配串基因,使得所能达到的智商最高 这里很明显要用状态压缩当前AC自动机上点使用了基因的情况所能达到的最优状态 我最开始对于状态的保存是, ...

  3. hdu 4284 状态压缩dp

    题意: 有N 个点的无向图,要去其中 h个地点做事,做事需要先办理护照,之后可以挣一定数量的钱,知道了一开始有的总钱数,和 一些城市之间           道路的花费,问可不可以在 指定的 h 个城 ...

  4. hdu 2167 状态压缩dp

    /* 状态转移方程:dp[i][j]=Max(dp[i][j],dp[i-1][k]+sum[i][j]); */ #include<stdio.h> #include<string ...

  5. HDU 4856 (状态压缩DP+TSP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4856 题目大意:有一个迷宫.迷宫里有些隧道,每个隧道有起点和终点,在隧道里不耗时.出隧道就耗时,你的 ...

  6. HDU 4640 状态压缩DP 未写完

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 解题思路: 首先用一个简单的2^n*n的dp可以求出一个人访问一个给定状态的最小花费,因为这i个 ...

  7. 2016"百度之星" - 初赛(Astar Round2A)1002 / HDU 5691 状态压缩DP

    Sitting in Line Problem Description   度度熊是他同时代中最伟大的数学家,一切数字都要听命于他.现在,又到了度度熊和他的数字仆人们玩排排坐游戏的时候了.游戏的规则十 ...

  8. HDU 5067 (状态压缩DP+TSP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5067 题目大意:蓝翔挖掘机挖石子.把地图上所有石子都运回起点,问最少耗时. 解题思路: 首先得YY出 ...

  9. hdu 4539(状态压缩dp)

    题意:曼哈顿距离是指:|x1-x2|+|y1-y2|,只要知道这个概念题意就懂了. 分析:这道题与前面做的几道题有所不同,因为当前行不仅与前一行有关,而且与前两行有关,所以我们开数组的时候还要记录前两 ...

  10. hdu 1074(状态压缩dp+记录路径)

    题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意 ...

随机推荐

  1. 图文教程:在Mac上搭建Titanium的iOS开发环境

    http://mobile.51cto.com/web-317170_all.htm 跨平台开发工具Titanium的兴起之路:HTML 5是最大威胁 比较Titanium和PhoneGap两大iOS ...

  2. 为什么我不愿意用ECharts

    前言 ECharts是百度一个使用 JavaScript 实现的开源可视化库,提供了创建多种多样的图标方式,包括坐标系,图例,提示,工具箱等基础组件,并在此上构建出折线图.柱状图.散点图.K线图.饼图 ...

  3. Windows和Linux如何使用Java代码实现关闭进程

    在用selenium做自动化测试时,由于各种不明原因,有时Chrome浏览器会出现假死的情况,也就是整个浏览器响应超时,本人脚本主要部署在Windows机器上,所以主要以Windows为主,浏览器为C ...

  4. 捕获arm托管磁盘虚拟机,并进行还原

    背景:托管磁盘虚拟机"hlmma69n2",附加了一块100GB的数据磁盘.可以通过Portal管理界面直接捕获该虚拟机并进行还原,详情见如下步骤: 1.在虚拟机内部执行一般化的操 ...

  5. Git工具的使用教程

    Git 是一种版本控制工具,也叫作版本管理软件(分布式管理软件).这里介绍Git的基本使用步骤,关于 Git 更详细的介绍,读者可以参考其官方网站提供的文档. 1  安装Git 在Ubuntu系统中安 ...

  6. _2_head_中标签

    创:20_3_2017修:5_4_2017 什么是title标签? --title   页面名(双) -- 整个html的页面名字,相当于一本书的书名 <title>北门吹雪</ti ...

  7. scrapy_items

    为什么要items? 当数据量多的时候,没有统一的数据管理,统一格式化麻烦 items中除了能添加字段,还能做什么? 1. 进行预先处理 2. 对从items出去的数据进行处理 3. 写上sql语句逻 ...

  8. JS正则表达式的基础用法

    RegExp(正则表达式)对象 正则表达式是一个描述字符模式的对象,可以处理更复杂的字符串.进行匹配替换. 常用的修饰符: i/m/g 使用方法: [声明方法一: new RegExp(value)] ...

  9. 防盗链[referer]

    原文出处:http://www.cnblogs.com/devilfree/archive/2012/09/11/2680914.html 总结一下今天学习防盗链Filter的一些知识点: 防盗链要实 ...

  10. svn: resource out of date; try updating的解决

    问题: svn提交文件时提示错误:resource out of date; try updating.说明该资源版本有问题,尝试更新svn,发现该文件没有可更新的内容.于是查看资源历史,发现有人第一 ...