https://www.zybuluo.com/ysner/note/1304855

题面

戳我

解析

豆子数这么少,肯定状压啊。
于是设\(f[x][y][s]\)表示到了\((x,y)\)这个点,包围豆子情况为\(s\)的方案数。
枚举一下出发点和最终豆子选取状态即可。
复杂度\(O(n^22^d)\)。

嗯,\(yy\)得很美好,然后不会判断豆子是否被包围。。。。。。。
实际上,判断一个点在一个多边形内的标准,就是它朝一个方向走会与多边形的边相交奇数次。
因为每次跨越边界都是从多边形内(外)到多边形外(内)。
姑且钦定这个方向为正右。
然后自己把握一下边的位置就行(如豆子中心偏下,反正不能与边界重叠)。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
#define re register
#define il inline
#define fp(i,a,b) for(re int i=a;i<=b;++i)
#define fq(i,a,b) for(re int i=a;i>=b;--i)
using namespace std;
const int N=12;
int n,m,d,w[N],f[N][N][1<<10],ans,M,sum[1<<10],mx[4]={1,-1,0,0},my[4]={0,0,1,-1},X[N],Y[N];
char s[N][N];
bool vis[N][N][1<<10];
struct dat{int x,y,S;};
queue<dat>Q;
il ll gi()
{re ll x=0,t=1;re char ch=getchar();while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();if(ch=='-') t=-1,ch=getchar();while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();return x*t;
}
il int GetSS(re int x,re int y,re int xx,re int yy,re int S)
{fp(i,0,d-1)if(((x==X[i]&&xx<X[i])||(x<X[i]&&xx==X[i]))&&y>Y[i]) S^=(1<<i);return S;
}
il void BFS(re int x,re int y)
{memset(f,63,sizeof(f));f[x][y][0]=0;Q.push((dat){x,y,0});vis[x][y][0]=1;while(!Q.empty()){re int x=Q.front().x,y=Q.front().y,S=Q.front().S;Q.pop();fp(i,0,3){re int xx=x+mx[i],yy=y+my[i];if(s[xx][yy]!='0') continue;re int SS=(i<2)?GetSS(x,y,xx,yy,S):S;if(f[xx][yy][SS]>f[x][y][S]+1){f[xx][yy][SS]=f[x][y][S]+1;if(!vis[xx][yy][SS]) vis[xx][yy][SS]=1,Q.push((dat){xx,yy,SS});}}vis[x][y][S]=0;}fp(i,0,M)ans=max(ans,sum[i]-f[x][y][i]);
}
int main()
{n=gi();m=gi();d=gi();M=(1<<d)-1;fp(i,0,d-1) w[i]=gi();memset(s,'#',sizeof(s));fp(i,1,n) scanf("%s",s[i]+1),s[i][m+1]='#';fp(i,1,n)fp(j,1,m)if(s[i][j]>='1'&&s[i][j]<='9') X[s[i][j]-'1']=i,Y[s[i][j]-'1']=j;fp(i,0,M)fp(j,0,d-1)if(i&(1<<j)) sum[i]+=w[j];fp(i,1,n) fp(j,1,m) if(s[i][j]=='0') BFS(i,j);printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/yanshannan/p/9769292.html

[SCOI2009]围豆豆相关推荐

  1. 【BZOJ1294】[SCOI2009]围豆豆(动态规划,状压)

    [BZOJ1294][SCOI2009]围豆豆(动态规划,状压) 题面 BZOJ 洛谷 题解 首先考虑如何判断一个点是否在一个多边形内(不一定是凸的),我们从这个点开始,朝着一个方向画一条射线,看看它 ...

  2. 【做题记录】[SCOI2009]围豆豆

    [SCOI2009]围豆豆 \(n\times m(n,m\le 10)\) 的网格中有 \(d\) 个球 \((d\le 9)\),要求在网格中选定一个起点开始做一个欧拉回路,路径的价值为路径完全包 ...

  3. 【题解】SCOI2009围豆豆

    很久之前就很想做的一道题,一直思考到今天才下定决心看题解.这道题中,很关键的一点就在于:如何判断一个点是否在一个多边形内?其实如果计算几何基本功扎实的话,应该是可以很快给出答案的(可惜我完全不行):由 ...

  4. 洛谷P2566 [SCOI2009]围豆豆(状压dp+计算几何)

    题面 传送门 题解 首先要解决一个问题,就是怎么判断一个点是否在多边形内部 从这个点向某一个方向做一条射线,如果这条射线和多边形的交点为奇数说明在多边形内,否则在多边形外 然而有一些特殊情况,比方说一 ...

  5. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  6. 退役前的做题记录2.0

    退役前的做题记录2.0 最近在刷省选题......大致上是按照省份刷的. 不过上面的题目顺序是按照写题的顺序排列的,所以可能会有点乱哈. [BZOJ2823][AHOI2012]信号塔 最小圆覆盖,随 ...

  7. 豆豆趣事[2015年08月]

    [b]引言[/b] 马上上学了,也没有给豆豆报什么班,只报了围棋的强化班.真心希望豆豆围棋能学有所成.现在豆豆学棋也上道儿了,会一些较复杂的计算了. [b]2015-08-01[/b] 今天到了碣石宫 ...

  8. 豆豆趣事[2011年03月]

    [b]引言[/b] 这个月豆豆回姥姥家了,只能通过他妈妈转述进行记录.内容可能会少一点儿. [b]2011-3-1[/b] 今天豆豆妈妈出门办事,我做饭晚了点儿,结果豆豆跑到邻居家吃了很多,还喝了点儿 ...

  9. 无穷级数求和7个公式_双色球2019129期渗透围红蓝(6+1实战,附:7个双色球胆码公式)...

    数据近期调整,谨慎参考.玩彩票是胆量和智慧加机遇,我买彩票完全碰运气. 第2019129期双色球红球解析: 第一位:近10期振幅走势7-2-2-2-9-9-9-4-4-1,奇偶比为4:6,目前偶数振幅 ...

  10. ACMNO.38 C语言-报数 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

    题目描述 有n人围成一圈,顺序排号. 从第1个人开始报数(从1到3报数),凡报到3的人退出圈子.`在这里插入代码片` 问最后留下的是原来的第几号的那位. 输入 初始人数n 输出 最后一人的初始编号 样 ...

最新文章

  1. 【大数据实时计算框架】Storm框架
  2. 推荐给Android开发者的抢手书单
  3. 机器学习算法之决策树
  4. 一篇来自网络的关于“enqueue”events的简短参考(转)
  5. 需求文档可以不签字吗之三-一个实例
  6. 如何在圆柱表面滚花纹_更多地了解圆柱形铣刀
  7. 双向dcdc变换器simulink仿真_台达_OBC双向充电_HighEfficiency HighDensity GaNBased 6.6kW
  8. 放苹果(信息学奥赛一本通-T1192)
  9. 学生成绩管理系统设计java_java学生成绩管理系统设计与实现
  10. Jetson Xavier中安装DIGITS-》Caffee中的错误
  11. 软件工程(敏捷过程和极限编程)
  12. 方正文祥E520硬盘保护卡还原卡软件使用要点讲解
  13. php jquery alert 美化,jquery插件hiAlert实现网页对话框美化_jquery
  14. 截至20161210沪市股票代码和名称
  15. PostgreSQL 数据库跨版本升级常用方案
  16. B2B网关支付方案介绍
  17. 正则限定开头和取反 (否)
  18. Python爬虫——爬取壁纸
  19. 从传统营销到网络销售的四个特点
  20. 十五分钟水edusrc证书(小学生日记)

热门文章

  1. 【大数据部落】混合IBCF协同过滤推荐算法推荐引擎的探索1
  2. java性能调试命令_性能测试--十个命令迅速发现性能问题
  3. 奔腾4 2.4CPU计算机硬件能升级吗,CPU怎么升级啊
  4. 信号数据EMD分解+IMF时序数据LSTM预测建模实践
  5. .sql文件导入mysql数据库中
  6. python set和frozenset 异同点学习记录
  7. Python数据库模块pymssql连接SQLServer数据库操作详解
  8. 机器学习(二)——xgboost(实战篇)Pima印第安人数据集上的机器学习-分类算法(根据诊断措施预测糖尿病的发病)
  9. mysql数据库root密码在哪个文件中_mysql数据库的root密码放在什么位置?
  10. C++ 循环for 引用 for(string : )