题目

在\(n\)行\(m\)列的网格中,你要圈一些地。

你从左上角出发,最后返回左上角,路径内部的区域视为被你圈住。 你不可以进入网格内部, 只能在边上行走。 你的路径不能在左上角以外自交, 但是边足够宽, 你可以重复经过而不自交。

网格中有一些格子对你很重要,你要尽量圈住它;而另一些格子对你有坏处,你不能圈住它。

求圈住\(i\)个重要的格子的最小路径长度。(\(n,m\leq 50,Special Block\leq 10\))


分析

自交除了左上角完全可以被等价的方案代替,所以可以忽略它,接着如何保证好的被圈,坏的不被圈,

把一个点向任意方向引一条射线,如果这条线穿过奇数次多边形,那么点在多边形内,否则点在多边形外,

所以可以判断竖着的边(横着的边也行),然后记录选取的状态跑SPFA,再深搜选取


代码

#include <cstdio>
#include <queue>
#include <cstring>
#define rr register
using namespace std;
struct rec{int x,y,S;}; queue<rec>q;
const int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
int spx[11],spy[11],n,m,cnt,po[11],dis[51][51][1024],ans[11];
bool v[51][51][1024]; char a[51][51];
inline signed min(int a,int b){return a<b?a:b;}
inline signed Turn_S(int x,int y,int SS){
for (rr int i=0;i<cnt;++i)
if (spx[i]>x&&spy[i]==y) SS^=po[i];
return SS;
}
inline void dfs(int SS,int dep,int now){
ans[now]=min(ans[now],dis[0][0][SS]);
if (dep==cnt) return;
if (a[spx[dep]][spy[dep]]=='I') dfs(SS|po[dep],dep+1,now+1);
dfs(SS,dep+1,now);
}
signed main(){
po[0]=1; rr char c;
for (rr int i=1;i<10;++i)
po[i]=po[i-1]+po[i-1];
for (n=1;(c=getchar())!=EOF;++n){
for (m=0;c=='.'||c=='I'||c=='X';c=getchar()){
a[n][++m]=c;
if (c!='.') spx[cnt]=n,spy[cnt]=m,++cnt;
}
}
memset(dis,42,sizeof(dis));
dis[0][0][0]=0,--n,v[0][0][0]=1,q.push((rec){0,0,0});
while (q.size()){
rr rec t=q.front(); rr int now=dis[t.x][t.y][t.S]; q.pop();
for (rr int k=0;k<4;++k){
rr int zx=t.x+dx[k],zy=t.y+dy[k],SS=t.S;
if (zx<0||zy<0||zx>n||zy>m) continue;
if (k&1) SS=Turn_S(t.x,k==3?t.y:zy,SS);
if (dis[zx][zy][SS]>now+1){
dis[zx][zy][SS]=now+1;
if (!v[zx][zy][SS]){
v[zx][zy][SS]=1;
q.push((rec){zx,zy,SS});
}
}
}
v[t.x][t.y][t.S]=0;
}
memset(ans,42,sizeof(ans));
dfs(0,0,0);
for (rr int i=1;i<=cnt;++i)
if (ans[i]<4e5) printf("%d\n",ans[i]);
return 0;
}

#搜索,计算几何#JZOJ 4016 圈地为王的更多相关文章

  1. MapReduce明星搜索指数统计,找出人气王

    我们继续通过项目强化掌握Combiner和Partitioner优化Hadoop性能 1.项目介绍 本项目我们使用明星搜索指数数据,分别统计出搜索指数最高的男明星和女明星. 2.数据集 3.分析 基于 ...

  2. Hadoop实战:明星搜索指数统计,找出人气王

    项目介绍 本项目我们使用明星搜索指数数据,分别统计出搜索指数最高的男明星和女明星. 数据集 明星搜索指数数据集,如下图所示.猛戳此链接下载数据集 思路分析 基于项目的需求,我们通过以下几步完成: 1. ...

  3. UMHexagonS搜索过程

    通过相邻块的预测得到mvp后,会以mvp为基础搜索最佳的匹配块,UMHexagonS就是h.264中用的一种搜索算法. UMHexagonS是一种整像素搜索算法,也就是搜索过程中,参考图像一直都是原来 ...

  4. pick王菊?作为“菊外人”的程序员能做点什么?

    转载:https://mp.weixin.qq.com/s/s1cb9Ij6ouTYYCZovLhXTA 最近,想必大家的朋友圈都被“王菊”占领了,打开朋友圈到处可以见到“pick王菊”.“陶渊明”. ...

  5. 什么?女神发了朋友圈,快来围观之Java设计模式:观察者模式

    目录 观察者模式 示例 定义 设计原则 意图 主要解决问题 何时使用 优缺点 女神和追求者的故事 Java中的实现 观察者模式 示例 微信公众号,关注就可以收到推送的消息,取消关注就不会收到 定义 定 ...

  6. 北大 ACM 分类 汇总

    1.搜索 //回溯 2.DP(动态规划) 3.贪心 北大ACM题分类2009-01-27 1 4.图论 //Dijkstra.最小生成树.网络流 5.数论 //解模线性方程 6.计算几何 //凸壳.同 ...

  7. 打败Google的灵童今在何方?

    微软和雅虎宣布在搜索和广告上10年合作,这事儿不知是不是前不久虚惊一场的微软收购雅虎案的好戏重演之序幕. 从表面上看,这次的合作改变不了搜索和广告目前的世界格局,也构不成对Google的致命威胁,反倒 ...

  8. Nutch+Lucene搜索引擎开发实践

    网络拓扑 图 1 网络拓扑图 安装Java JDK 首先查看系统是否已经安装了其它版本号的JDK,假设有,先要把其它版本号的JDK卸载. 用root用户登录系统. # rpm-qa|grep gcj ...

  9. 微信小程序外包 就找北京动软 专业承接微信小程序定制

    很多人问为什么要开发微信小程序,微信小程序的“入口”在哪儿? 1.只有访问过的小程序,才会出现所谓的「入口」. 所有访问过得小程序都可以从微信首屏下面的「发现」点过去.(必须是最新版微信) 这个所谓的 ...

  10. Android自动化测试学习路线

    最近在整理Android自动化测试的相关资料,大体上把一些知识点梳理了,这里做一个简单的分享! Android里面测试相关的工具和框架太多了.你应该从以下几个方面入手. 编程语言的选择 如果你要学习的 ...

随机推荐

  1. SDL开发笔记(三):使用SDL渲染窗口颜色和图片

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  2. portainer docker可视化工具

    下载可视化工具 docker pull portainer/portainer 启动portainer --restart=always 只要挂掉了 就自动重启 docker run -d -p 80 ...

  3. 【LeetCode栈与队列#02】有效括号

    有效括号 力扣题目链接(opens new window) 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右 ...

  4. 第131篇:如何上传一个npm包

    好家伙, NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准.  NPM是世界上最大的软件注册表. 1.首先我们 ...

  5. 【Azure 应用服务】在App Service for Windows中实现反向代理

    问题描述 如何在App Service for Windows(.NET Stack)中,如何实现反向代理呢? 正向代理:客户端想要访问一个服务器,但是它可能无法直接访问这台服务器,这时候这可找一台可 ...

  6. 【Azure 应用服务】"App Service"如何能判断自身网路没有问题?

    问题描述 当创建了一个App Service服务后,如何能判断服务自身网络链路路没有问题? 如果是用VM,通常用Ping可以判断.但是"网站应用App Service" 的Kudu ...

  7. 笔记本linux问题记录

    目录 UEFI笔记本无法引导进入操作系统 grub引导错误,无法进入系统 笔记本亮度不能保存 禁用独立显卡 KVM 解决nmcli dev 中的wlan0显示unavailable 杂项 UEFI笔记 ...

  8. 从实测出发,掌握 NebulaGraph Exchange 性能最大化的秘密

    自从开发完 NebulaGraph Exchange,混迹在各个 NebulaGraph 微信群的我经常会看到一类提问是:NebulaGraph Exchange 的性能如何?哪些参数调整下可以有更好 ...

  9. 1. Canal入门

    1. Canal简介 官方文档: https://github.com/alibaba/canal/wiki/简介 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.早期 ...

  10. Java 类的成员之四: 代码块(或初始化块)

    1 package com.bytezreo.block; 2 3 /** 4 * 5 * @Description 类的成员之四: 代码块(或初始化块) 6 * @author Bytezero·z ...