题解:

首先发现假如一个豆豆被多边形围住了,那么从这个豆豆引出一条射线

会有奇数个焦点

然后我们从每个豆豆引出一条射线

然后状压dfs

代码:

#include<bits/stdc++.h>
using namespace std;
const int c[][]={{,},{,-},{,},{-,}};
struct point{int cx,cy,x,y;}b[];
int n,m,d,ans,x,w[],dis[][][];
char mp[][];
struct node{int i,j,s;};
queue<node> q;
int cross(int x,int y,int nx,int ny,int s)
{
for (int i=;i<=d;i++)
if (((x<b[i].cx&&nx>=b[i].cx)||(x>=b[i].cx&&nx<b[i].cx))&&y>b[i].cy)s^=<<(i-);
return s;
}
void spfa(int sx,int sy)
{
q.push((node){sx,sy,});
memset(dis,0x3f,sizeof(dis));
dis[sx][sy][]=;
while (!q.empty())
{
node x=q.front();
q.pop();
for (int k=;k<;k++)
{
int nx=x.i+c[k][],ny=x.j+c[k][];
if (nx<||nx>n||ny<||ny>m||mp[nx][ny]!=) continue;
int s=cross(x.i,x.j,nx,ny,x.s);
if (dis[nx][ny][s]>dis[x.i][x.j][x.s]+)
{
dis[nx][ny][s]=dis[x.i][x.j][x.s]+;
q.push((node){nx,ny,s});
}
}
}
for (int i=;i<<<d;i++)
{
int res=-dis[sx][sy][i];
for (int j=;j<=d;j++)
if (i&(<<(j-))) res+=w[j];
ans=max(ans,res);
}
}
int main()
{
scanf("%d%d%d",&n,&m,&d);
for (int i=;i<=d;i++) scanf("%d",&w[i]);
for (int i=;i<=n;i++)
{
scanf("%s",mp[i]+);
for (int j=;j<=m;j++)
if (mp[i][j]>&&mp[i][j]<=)
{
x=mp[i][j]-'';
b[x]=(point){i,j,,j+};
}
}
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
if (mp[i][j]==)spfa(i,j);
printf("%d\n",ans);
}

bzoj1294的更多相关文章

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

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

  2. 【BZOJ1294】[SCOI2009]围豆豆Bean 射线法+状压DP+SPFA

    [BZOJ1294][SCOI2009]围豆豆Bean Description Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别 ...

  3. BZOJ1294: [SCOI2009]围豆豆Bean

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1294 状压dp,dis[s][i][j]表示从(i,j)出发围的状态是s的最短路. 然后判断一 ...

  4. bzoj1294 [SCOI2009]围豆豆

    Description Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别为每颗豆子的分值. 接着N行有一个N×M的字符矩阵来描述 ...

  5. [BZOJ1294][SCOI2009]围豆豆Bean 射线法+状压dp+spfa

    1294: [SCOI2009]围豆豆Bean Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 458  Solved: 305[Submit][Sta ...

  6. bzoj1294题解

    [题意分析] 给定一张网格图,每个网格可能是普通点.特殊点或障碍点,每个特殊点有一个分值.要求选定一条只经过普通点的可重复回路,使回路内部的特殊点分值和最大. [算法分析] 引理:射线法 对于平面内任 ...

  7. 【状压dp】Bzoj1294 围豆豆

    题目 Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别为每颗豆子的分值. 接着N行有一个N×M的字符矩阵来描述游戏矩阵状态,0表 ...

  8. BZOJ1294 洛谷P2566 状态压缩DP 围豆豆

    传送门 题目描述 是不是平时在手机里玩吃豆豆游戏玩腻了呢?最近MOKIA手机上推出了一种新的围豆豆游戏,大家一起来试一试吧游戏的规则非常简单,在一个N×M的矩阵方格内分布着D颗豆子,每颗豆有不同的分值 ...

随机推荐

  1. 基于虹软sdk,java实现人脸识别(demo)

    ## 开发环境准备:###开发使用到的软件和工具:* Jdk8.mysql5.7.libarcsoft_face.dll(so).libarcsoft_face_engine.dll(so).liba ...

  2. Eclipse项目左侧调整显示或者不显示路径

    View Menu(倒三角)-->Package Presentation-->选择Flat或Hierarchical

  3. gulp自动化打包工具

    /** * Created by hasee on 2016/7/5. */var gulp = require('gulp');var sass = require('gulp-sass');//容 ...

  4. using 自动释放资源示例

    我们在使用SqlConnection的时候可以加入using,那么在using语句结束后就会自动关闭连接.那么这种情况是怎么是实现的呢?我们能够自己写一个类似于SqlConnection的类来让usi ...

  5. TP3.2.3框架与已有模板做结合

    具体实现步骤: a.  复制模板文件到View指定目录 b. 复制到css.img.js静态资源文件到系统指定目录 c. 把静态资源(css.img.js)文件的路径设置为"常量" ...

  6. JS获取当前日期方法

    Date.prototype.format = function (format) { var args = { "M+": this.getMonth() + 1, " ...

  7. 【错误】IntelliJ IDEA使用Gradle编译报错

    一.异常如下: No signature of method: org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.Def ...

  8. Confluence 6 对一个空间进行归档后产生的影响

    空间 如果一个空间被归档: 将不会在查找结果中显示,除非你选择 在归档空间中查找(Search archived spaces).如果没有归档空间的话,这个功能是隐藏的. 页面和内容将不会在 Conf ...

  9. python记录_day31 进程同步和进程通信

    一.进程同步 1.同步锁(又叫互斥锁) 加锁的代码以后,同一时间内只能被一个进程执行 from multiprocessing import Process, Lock def fun(loc): l ...

  10. js中const、let、var的区别

    今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 ...