小白月赛22 D : 收集纸片
D:收集纸片

考察点 : 全排列,对数据范围的估计程度
坑点 : 注意算最后回到初始的那步距离
析题得侃 :
一看题目最短路,诶呦,这不是最拿手的 BFS 走最短路吗?哈哈,定睛一看
这么多目的地,这还走个茄子,但是看看这道题的数据范围, 10,这不就完完
全全的可以暴力一发了,怎么暴力呢 ?
我们并不知道那条线路会是最优的,所以我们可以用全排列列举出每一条线路,
然后最后取最小值即可。
Code :
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#define INF 0x3f3f3f3f
#define x first
#define y second
using namespace std;
const int maxn = 25;
typedef pair<int,int>PII;
int T,n,res;
int start_x,start_y,end_x,end_y;
int a[maxn];
PII P[maxn];
int main(void) {
int dist(int x,int y);
void solve();
scanf("%d",&T);
while(T --) {
scanf("%d%d",&end_x,&end_y);
scanf("%d%d",&start_x,&start_y);
scanf("%d",&n);
for(int i = 1; i <= n; i ++) {
scanf("%d%d",&P[i].x,&P[i].y);
}
P[n + 1].x = start_x,P[n + 1].y = start_y;
res = INF;
solve();
printf("The shortest path has length %d\n",res);
}
return 0;
}
int dist(int ax,int ay,int bx,int by) {
return abs(ax - bx) + abs(ay - by);
}
void solve() {
// 拿 a 数组的不同排列作为我们走的每条线路
for(int i = 1; i <= n; i ++) {
a[i] = i;
}
do {
int ans = 0;
for(int i = 1; i <= n; i ++) {
if(P[a[i]].x > end_x || P[a[i]].y > end_y) continue;
if(i == 1) ans += dist(start_x,start_y,P[a[i]].x,P[a[i]].y);
else ans += dist(P[a[i]].x,P[a[i]].y,P[a[i - 1]].x,P[a[i - 1]].y);
}
// 回到起点
ans += dist(start_x,start_y,P[a[n]].x,P[a[n]].y);
res = min(res,ans);
} while(next_permutation(a + 1,a + 1 + n));
return ;
}
后记:
一定要观察数据范围,根据数据范围采取对应的策略
小白月赛22 D : 收集纸片的更多相关文章
- 小白月赛22 G : 仓库地址
G : 仓库地址 考察点: 二维中位数 坑点 : 做就 OK 析题得侃: 我们发现 x 和 y 是相互独立的,也就是说先移动 x 或者先移动 y 都是可以到达一个点的,所以我们可以先找到 横坐标的 中 ...
- 小白月赛22 J : 计算 A + B
J:计算 A + B 考察点 : 高精度,字符串 坑点 : 字符串中可能全是数字,或者 + 超过 1 个,需要进行特殊判断 析题得侃: 关于高精度的各种板子 Code: #include <ve ...
- 小白月赛22 F: 累乘数字
F:累乘数字 考察点: 思维,高精度 坑点 : 模拟就 OK 析题得侃: 如果你思维比较灵敏:直接输出这个数+ d 个 "00"就行了 当然,我还没有那么灵敏,只能用大数来搞了 关 ...
- 小白月赛22 E : 方格涂色
E:方格涂色 考察点 : 思维,模拟 坑点 : long long 其他的好像没什么,读懂题意就可以 AC 不要被样例画的图所迷惑 Code: #include <vector> #inc ...
- 小白月赛22 B : 树上子链
B:树上子链 考察点 : 树的直径 坑点 : long long, 是点权不是边权 一个点也算一条链 析题得侃: 关于树的直径 这道题考察的是树的直径,最好用树形DP来写,具体解释详见上述博客, 这道 ...
- 小白月赛22 A : 操作序列
A:操作序列 析题得说: 考察点 : 模拟,STL库容器的使用 坑点 : 区间不要搞丢东西 难点 : 这个题比较变态的是我们不知道每次输入每行是一个数还是两个数,就需要进行判断, 怎么判断呢?用 sc ...
- 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花
求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...
- [比赛|考试]nowcoder 小白月赛7
牛客小白月赛7 比赛地址.本次比赛我切了8道(ACM赛制),rank(20). 反思:刚入手ACM赛,光追求刺激了,没有总结ACM赛制的经验.是应该多提交>..还是少提交...小白赛还有两道不会 ...
- 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?
牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...
随机推荐
- MongoDB 复本集搭建
复制集的特点 数据一致性 主是唯一的,但不是固定的 没有MySQL那样的双主结构 大多数原则,集群存活节点小于等于二分之一时集群不可写,只可读. 是否能选举出新的主节点,是由当前复制集成员存活量 ...
- Linux 目录解析
FHS:Filesystem Hierarchy Standard(文件系统目录标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结 ...
- PHP 安装扩展步骤
一般来说php安装扩展需要几下几个步骤 1.下载扩展包 比如 pdo_mysql.tar.gz (如果不想下载,可以到php安装目录,(类似php-5.3.3/ext/)的ext文件中找 ...
- idea创建基于maven的web项目
1.点击create new project,选择maven,点击next 2.输入项目信息,点击finish 3.进入项目后,点击菜单File->Project Structure开始配置项目 ...
- Android中使用AlertDialog实现几种不同的对话框
场景 app中常见的对话框. 简单的带确定取消按钮的对话框 带列表的对话框 带单项选择的对话框 带多项选择的对话框 注: 博客: https://blog.csdn.net/badao_liumang ...
- robotframework安装与详解
Robot Framework(以下简称rf)是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于轮次 ...
- hadoop3自学入门笔记(3)-java 操作hdfs
1.core-site.xml <configuration> <property> <name>fs.defaultFS</name> <val ...
- update mysql row (You can't specify target table 'x' for update in FROM clause)
sql语句(update/delete都会出现此问题) update x set available_material_id = null where id not in (select id fro ...
- MFC/QT 学习笔记(三)——MFC模板创建
新建项目->MFC模板->MFC应用程序->应用程序类型:单个文档:项目样式:MFC 标准->下一步...OK 此时点击运行,可直接弹出窗口. 调整 视图->类视图: · ...
- 关于js获取元素在屏幕中的位置的方法
针对我们获取元素在页面中的位置的问题,我们还是用老师一峰老师的方法来解决吧 下面上HTML代码 <div class="left_footer"> <p data ...