题目背景

数据有更改

题目描述

某乡有nn个村庄(1<n \le 201<n≤20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)s(0<s<1000)是已知的,且AA村到BB村与BB村到AA村的路大多不同。为了提高效率,他从商店出发到每个村庄一次,然后返回商店所在的村,假设商店所在的村庄为11,他不知道选择什么样的路线才能使所走的路程最短。请你帮他选择一条最短的路。

输入输出格式

输入格式:

村庄数nn和各村之间的路程(均是整数)。

输出格式:

最短的路程。

输入输出样例

输入样例#1: 复制

3
0 2 1
1 0 2
2 1 0
输出样例#1: 复制

3

------------------------------------------------------------
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct pd
{
int ha,e;
}lxy[][];
//存图,ha表示各点时间消耗,e表示要去的点,因为排序动列,不动行,所以记下列,就是要去的点
int hrb[],n,i,j,k,minn=1e9,maxn=,emm[];//新增一个emm数组解决排序动列的问题
int cmp(pd a,pd b)
{
return a.ha<b.ha;
}//排序函数
int ss(int x,int y,int z) //y记录走过的村庄数
{
if(z>=minn)
return ;//用sort优化,提前找出最小值,剪枝
if(z+n-y++maxn>=minn)//两地之间距离最短是1
return ;
//预见性剪枝,maxn表示x点到1的最小距离,然后剩余点取最小值1,极值判定
if(y==n)
{
minn=min(minn,z+emm[x]);
return ;
}
if(y<n)
for(int i=;i<=n;i++)
if(hrb[lxy[x][i].e]==)
//判断是否走过,为啥是lxy[x][i].e,请见上面解释
{
if(z+lxy[x][i].ha+n-y+maxn>minn)
return ;
//预见性剪枝,极值判定,用这两个可以90分
hrb[lxy[x][i].e]=;
ss(lxy[x][i].e,y+,z+lxy[x][i].ha);
hrb[lxy[x][i].e]=;
}
return ;
}
int main()
{
scanf("%d",&n);
for(i=;i<=n;i++)
{
for(k=;k<=n;k++)
{
scanf("%d",&lxy[i][k].ha);
lxy[i][k].e=k;//记录列数
if(i!=&&k==)
maxn=min(maxn,lxy[i][].ha),emm[i]=lxy[i][].ha;
//求x到1的最小时间花费,用于预见性剪枝,和存x到1的花费用于搜索结算,解决排序造成的列乱序的情况
}
sort(lxy[i]+,lxy[i]+n+,cmp);
//STL大法好,二维数组的排序要用for,sort可以优化找出的答案minn,减少无用功
}
hrb[]=;//跑过了就要踩,不然会跑回去,想想80分代码为啥不用赋值为1?因为80分列没乱序
ss(,,);
printf("%d",minn);
return ;
}

这道题吧

标签上是搜索

然而

大部分都是状压dp

但还好

还有写搜索的

(我坚持写搜索的原因就是我搜索不太好)

虽然草草的写了一个

还过了样例

但全wa了

庆幸了一小下

没有tle mle什么的

但当我不太会改的时候

才知道我的搜索是totally错的

向现实低头的我

有卑微看题解了

(题解都在代码中)

P1171 售货员的难题--搜索(剪枝)的更多相关文章

  1. 洛谷P1171 售货员的难题

    P1171 售货员的难题 题目背景 数据有更改 题目描述 某乡有n个村庄(1<n<20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且 ...

  2. P1171 售货员的难题

    P1171 售货员的难题 题目描述 某乡有nn个村庄(1<n \le 201<n≤20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)s(0< ...

  3. 洛谷 P1171 售货员的难题

    P1171 售货员的难题 题目背景 数据有更改 题目描述 某乡有n个村庄(1<n<20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且 ...

  4. 【题解】P1171 售货员的难题

    Tags 搜索,状压​. 裸的旅行商问题 #include <stdio.h> #include <string.h> #define re register #define ...

  5. 洛谷 P1171 售货员的难题 【状压dp】

    题目描述 某乡有n个村庄(1<n<20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且A村到B村与B村到A村的路大多不同.为了提高效率 ...

  6. 洛谷P1171 售货员的难题【状压DP】

    题目描述 某乡有n个村庄(1 输入格式: 村庄数n和各村之间的路程(均是整数). 输出格式: 最短的路程. 输入样例: 3 0 2 1 1 0 2 2 1 0 输出样例 3 说明 输入解释 3 {村庄 ...

  7. 2018.07.18 洛谷P1171 售货员的难题(状压dp)

    传送门 感觉是一道经典的状压dp,随便写了一发卡了卡常数开了个O(2)" role="presentation" style="position: relati ...

  8. P1171 售货员的难题 暴力dp

    题面 著名的TSP问题,NPC问题 对于数据大的情况,我们可以使用一系列近似算法进行寻找解. 对于数据规模小的情况,我们可以直接暴力dp 一开始写了一个dfs,然后就被n=20的数据卡爆了 #incl ...

  9. codevs 2596 售货员的难题

    2596 售货员的难题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 某乡有n个村庄(1<n<=15),有一个售货 ...

随机推荐

  1. 洛谷P4104 [HEOI2014]平衡(dp 组合数学)

    题意 题目链接 Sol 可以把题目转化为从\([1, 2n + 1]\)中选\(k\)个数,使其和为\((n+1)k\). 再转化一下:把\((n+1)k\)划分为\(k\)个数,满足每个数在范围在\ ...

  2. 【代码笔记】Web-JavaScript-JavaScript字符串

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  3. 学习之路-前端-笔记-一、HTML笔记

    各种技巧 1.在Webstrom中 同时按ctrl+alt+insert创建新内容 2.输入标签按tab自动补全 按end 或 HOME实现光标移动到当前行的最后或最前 3.按住alt键不放同时按鼠标 ...

  4. 苹果手机怎么屏幕录屏 ios10怎么录屏

    手机录屏已经现阶段经常使用的功能,有些人喜欢在手机上看视频,看直播.但是有时候看到很精彩的视频,就想要录制下来,这个时候可以采取录屏的方式.那么就涉及到手机怎么录制屏幕视频了?想用苹果手机把手机屏幕录 ...

  5. 求二叉树第n层节点数

    在知乎看到今日头条的一个面试题“求二叉树第n层节点数”:https://zhuanlan.zhihu.com/p/25671699,想到了这样一个解法,欢迎大家交流 我的解法采用递归的思想,从0层开始 ...

  6. Android内存优化(二)解析Memory Monitor、Allocation Tracker和Heap Dump

    前言 要想做好内存优化工作,就要掌握两大部分的知识,一部分是知道并理解内存优化相关的原理,另一部分就是善于运用内存分析的工具.本篇就来介绍内存分析工具:Memory Monitor.Allocatio ...

  7. Windows上通过bat调用jmx进行循环运行

    1.jmx测试脚本中有两个线程组: 1)第一个线程组:模拟60台客户机并发像服务器发送上报请求,需要调用线程组的循环运行 2)第二个线程组:60台客户机上线后,模拟管理平台对客户机进行基础操作,如:创 ...

  8. mysql 执行语句

    连接数据库: $con = mysql_connect(服务器地址,用户名,密码): 选择数据库: $select = mysql_select_db(数据库名称); $select = mysql_ ...

  9. Bootstrap table 分页 In asp.net MVC

    中文翻译文档: http://blog.csdn.net/rickiyeat/article/details/56483577 版本说明: Jquery v2.1.1 Bootstrap V3.3.7 ...

  10. ELK收集tomcat状态日志

    1.先查看之前的状态日志输出格式:在logs/catalina.out这个文件中 最上面的日志格式我们可能不太习惯使用,所以能输出下面的格式是最好的,当然需要我们自定义日志格式,接下来看看如何修改 2 ...