CSU1129 送货到家 【状压dp】
哈哈发现这道题竟然没有题解,于是我决定写一份!
状压dp
题目:
懒惰的巫女Reimu因为各种原因在香霖堂的店主Rinnosuke那儿欠下了很多债,于是乎只好靠帮他在幻想乡中送货来偿还掉微不足道的一小部分。
懒归懒,Reimu还是很聪明的,她希望送货的总路程尽可能的短,同时任何一个地方不经过两次。
简而言之,便是在一张图上找一个边权和最小经过所有点恰好一次的封闭回路。
Input
多组输入数据。
第一行为一个N(N<=15),即图上总共有多少个点。
之后共N行以邻接矩阵格式输入边的数据。
保证i->j与j->i的距离相同。
Output
每组数据仅一行,输出最小的封闭回路或者是“NoAnswer”。
Sample Input
5
0 1 3 3 1
1 0 1 3 3
3 1 0 1 3
3 3 1 0 1
1 3 3 1 0
Sample Output
5
是一道很典型的旅行商问题
不同之处是,大白上的旅行商问题是一定会有答案的,而且是从0这个点开始,这道题可能会有no answer的情况并且不是从0开始
当某个图从任意点出发都无法回到起点时,就输出noanswer
因为用邻接矩阵输入,所以预处理将0设成INF表示无法连通
dp数组不能太大 20的时候就爆内存了
初始化ans为INF 跑了一圈还是INF的话说明没走通就是没结果
刚开始把每个点作为起点都判了一遍 某一个无法连通的样例不知道为啥输出了结果
后来赵木杉学长启发 发现因为是无向图 所以并不需要判断以每个点作为起点 只用判断从0开始就可以了
因为要是能形成一个圈 以哪个为起点都是可以的 要是不能 以哪个为起点都是不行的
代码如下
#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;
int n;
long long edge[20][20],dp[1<<16][16];
bool vis[20];
long long rec(int s,int v,int now)
{
if(dp[s][v]>=0)
return dp[s][v];
if(s==(1<<n)-1&&v==now)
return dp[s][v]=0;
long long res=INF;
for(int u=0;u<n;u++)
{
if(!(s>>u&1))
{
res=min(res,rec(s|1<<u,u,now)+edge[v][u]);
}
}
return dp[s][v]=res;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%lld",&edge[i][j]);
if(edge[i][j]==0)
edge[i][j]=INF;
}
}
memset(dp,-1,sizeof(dp));
int cnt=0;
for(int i=0;i<n;i++)
{
if(edge[0][i]==1)
cnt++;
}
long long ans=INF;
ans=min(ans,rec(0,0,0));
/*for(int i=0;i<n;i++)
{
ans=min(ans,rec(0,i,i));
}
*/
if(ans!=INF)
printf("%lld\n",ans);
else
printf("NoAnswer\n");
}
return 0;
}
提供一组noanswer的样例吧
4
0 1 0 0
1 0 2 4
0 2 0 3
0 4 3 0
CSU1129 送货到家 【状压dp】的更多相关文章
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- HDU 1074 Doing Homework (状压dp)
题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...
- 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP
[BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...
- 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP
[BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...
随机推荐
- [OpenCV] Samples 15: Background Subtraction and Gaussian mixture models
不错的草稿.但进一步处理是必然的,也是难点所在. Extended: 固定摄像头,采用Gaussian mixture models对背景建模. OpenCV 中实现了两个版本的高斯混合背景/前景分割 ...
- 使用HttpClient访问url的工具类
maven依赖jar包配置: <dependency> <groupId>org.apache.httpcomponents</groupId> <artif ...
- linux-nohup后台运行
先说一下linux重定向: 0.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出. 在一般使用时,默认的是标准输出,既1.当我们需要特殊用途时,可以使用其他标 ...
- PHP代码审计笔记--变量覆盖漏洞
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击. 经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数, ...
- iOS开发--UILabel可以显示\n
UILabel*label; //设置换行 label.lineBreakMode = UILineBreakModeWordWrap; label.numberOfLines = ; 换行符还是“\ ...
- C++ template —— template metaprogram(九)
metaprogramming含有“对一个程序进行编程”的意思.换句话说,编程系统将会执行我们所写的代码,来生成新的代码,而这些新代码才真正实现了我们所期望的功能.通常而言,metaprogrammi ...
- 基于Cocos2d-x学习OpenGL ES 2.0系列——编写自己的shader(2)
在上篇文章中,我给大家介绍了如何在Cocos2d-x里面绘制一个三角形,当时我们使用的是Cocos2d-x引擎自带的shader和一些辅助函数.在本文中,我将演示一下如何编写自己的shader,同时, ...
- 《转载》Eclipse项目上传码云
本文转载自http://blog.csdn.net/izzyliao/article/details/53074452 把Eclipse项目上传到码云的步骤: 1.登录码云:新建项目 2.输入项目名: ...
- Centos6下Python3的编译安装
本文转载自 Centos6下Python3的编译安装 系统环境:CentOS 6.8-Minimal 安装Python依赖包: 1 [root@Python src]# yum install zli ...
- 执行Batch批处理遇到的问题
1.务必关掉自动提交 增强执行效率 conn.setAutoCommit(false); 2.executeBatch失效问题 <1>务必将语句pstmt = conn.prepareSt ...