bzoj1294
题解:
首先发现假如一个豆豆被多边形围住了,那么从这个豆豆引出一条射线
会有奇数个焦点
然后我们从每个豆豆引出一条射线
然后状压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的更多相关文章
- 【BZOJ1294】[SCOI2009]围豆豆(动态规划,状压)
[BZOJ1294][SCOI2009]围豆豆(动态规划,状压) 题面 BZOJ 洛谷 题解 首先考虑如何判断一个点是否在一个多边形内(不一定是凸的),我们从这个点开始,朝着一个方向画一条射线,看看它 ...
- 【BZOJ1294】[SCOI2009]围豆豆Bean 射线法+状压DP+SPFA
[BZOJ1294][SCOI2009]围豆豆Bean Description Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别 ...
- BZOJ1294: [SCOI2009]围豆豆Bean
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1294 状压dp,dis[s][i][j]表示从(i,j)出发围的状态是s的最短路. 然后判断一 ...
- bzoj1294 [SCOI2009]围豆豆
Description Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别为每颗豆子的分值. 接着N行有一个N×M的字符矩阵来描述 ...
- [BZOJ1294][SCOI2009]围豆豆Bean 射线法+状压dp+spfa
1294: [SCOI2009]围豆豆Bean Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 458 Solved: 305[Submit][Sta ...
- bzoj1294题解
[题意分析] 给定一张网格图,每个网格可能是普通点.特殊点或障碍点,每个特殊点有一个分值.要求选定一条只经过普通点的可重复回路,使回路内部的特殊点分值和最大. [算法分析] 引理:射线法 对于平面内任 ...
- 【状压dp】Bzoj1294 围豆豆
题目 Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别为每颗豆子的分值. 接着N行有一个N×M的字符矩阵来描述游戏矩阵状态,0表 ...
- BZOJ1294 洛谷P2566 状态压缩DP 围豆豆
传送门 题目描述 是不是平时在手机里玩吃豆豆游戏玩腻了呢?最近MOKIA手机上推出了一种新的围豆豆游戏,大家一起来试一试吧游戏的规则非常简单,在一个N×M的矩阵方格内分布着D颗豆子,每颗豆有不同的分值 ...
随机推荐
- feed
a1=tf.placeholder(tf.float32) # 占位符 a2=tf.placeholder(tf.float32)r=tf.multiply(a1,a2) with tf.Ses ...
- Git安装与使用
转载自:https://www.cnblogs.com/smuxiaolei/p/7484678.html git 提交 全部文件 git add . git add xx命令可以将xx文件添加到暂 ...
- Cocos Creator 智能提示 for WebStorm
0.首先下载安装Node.js,否则下面将找不到关于Node.js的设置选项. 1.智能提示设置File->Settings ①设置为最新的ECMAScript版本 ②Enable Node.j ...
- Python全栈开发-Day10-进程/协程/异步IO/IO多路复用
本节内容 多进程multiprocessing 进程间的通讯 协程 论事件驱动与异步IO Select\Poll\Epoll——IO多路复用 1.多进程multiprocessing Python ...
- Redis持久化AOF和RDB对比
RDB持久化 AOF持久化 全量备份,一次保存整个数据库 增量备份,一次保存一个修改数据库的命令 保存的间隔较长 保存的间隔默认一秒 数据还原速度快 数据还原速度一般 save会阻塞,但bgsave或 ...
- 雷林鹏分享:XML 属性
XML 属性 XML元素具有属性,类似 HTML. 属性(Attribute)提供有关元素的额外信息. XML 属性 在 HTML 中,属性提供有关元素的额外信息: 属性通常提供不属于数据组成部分的信 ...
- SSH免密钥登陆
local ipaddress:10.47.39.7:remote ipaddress:10.47.39.8 1.生成公钥和私钥 [root@local ~]# ssh-keygen -t rsa ...
- 网站访问出现 ------ Can not write to cache files, please check directory ./cache/ .
最近在搞微商城时,突然出现了Can not write to cache files, please check directory ./cache/ .这样一个提示, 但最近好像没搞什么大动作,怎么 ...
- flex自定义preloader预加载进度条
flex默认的preloader已经很不错了,可是有时候还是需要自定义的. 需要在要出现自定义预加载的程序的<mx:Application>标签里加入preloader="& ...
- TP5中的小知识
在TP5中如果想用select 查询后,变成数组,用toArray()这个函数的话,必须在连接数据库中把 数据集返回类型变成 'resultset_type'=>'\think\Collecti ...