[BZOJ1294][SCOI2009]围豆豆Bean 射线法+状压dp+spfa
1294: [SCOI2009]围豆豆Bean
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 458 Solved: 305
[Submit][Status][Discuss]
Description

Input
Output
Sample Input
3
30 -100 30
00000000
010203#0
00000000
Sample Output
HINT
50%的数据满足1≤D≤3。
100%的数据满足1≤D≤9,1≤N, M≤10,-10000≤Vi≤10000。
从每个豆豆射出一条射线,若经过路线奇数次则说明路线将其包围,若经过偶数次则不包围。
设状态f[i][j][k]表示到达(i,j)围豆豆状态为k的最大价值。
每次枚举起点,用spfa转移即可。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define maxn 15
using namespace std;
int tx[]={,-,,};
int ty[]={,,,-};
char a[maxn];
int num[maxn][maxn];
int val[maxn];
int n,m,d;
int x[maxn],y[maxn];
int f[maxn][maxn][];
int inq[maxn][maxn][];
int ans=;
struct data {
int x,y,z;
}q[];
void work(int i,int j) {
memset(f,-,sizeof(f));
int head=,tail=;
q[]=(data){i,j,};
f[i][j][]=;
while(head!=tail) {
data now=q[head++];if(head==) head=;
if(now.x==i&&now.y==j) ans=max(ans,f[now.x][now.y][now.z]);
for(int k=;k<;k++) {
int tox=now.x+tx[k],toy=now.y+ty[k],toz=now.z;
int add=;
if(tox<||toy<||tox>n||toy>m||num[tox][toy]!=) continue;
if(now.x!=tox) {
data temp;
if(tox>now.x) temp=(data){now.x,now.y,now.z};else temp=(data){tox,toy,now.z};
for(int l=;l<=d;l++) {
if(temp.y>y[l]&&temp.x==x[l]) {
temp.z^=(<<(l-));
if(temp.z&(<<(l-))) add+=val[l];
else add-=val[l];
}
}
toz=temp.z;
}
if(f[tox][toy][toz]<f[now.x][now.y][now.z]+add-){
f[tox][toy][toz]=f[now.x][now.y][now.z]+add-;
if(!inq[tox][toy][toz]) {
q[tail++]=(data){tox,toy,toz};if(tail==) tail=;
inq[tox][toy][toz]=;
}
}
inq[now.x][now.y][now.z]=;
}
}
}
int main() {
scanf("%d%d%d",&n,&m,&d);
for(int i=;i<=d;i++) scanf("%d",&val[i]);
for(int i=;i<=n;i++) {
scanf("%s",a+);
for(int j=;j<=m;j++) {
if(a[j]=='') num[i][j]=;
else if(a[j]!='#') x[a[j]-'']=i,y[a[j]-'']=j,num[i][j]=-;
else num[i][j]=;
}
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(num[i][j]==) work(i,j);
printf("%d",ans);
return ;
}
[BZOJ1294][SCOI2009]围豆豆Bean 射线法+状压dp+spfa的更多相关文章
- 【BZOJ1294】[SCOI2009]围豆豆Bean 射线法+状压DP+SPFA
[BZOJ1294][SCOI2009]围豆豆Bean Description Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别 ...
- 【BZOJ1294】[SCOI2009]围豆豆(动态规划,状压)
[BZOJ1294][SCOI2009]围豆豆(动态规划,状压) 题面 BZOJ 洛谷 题解 首先考虑如何判断一个点是否在一个多边形内(不一定是凸的),我们从这个点开始,朝着一个方向画一条射线,看看它 ...
- 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的字符矩阵来描述 ...
- HDU 4284 状压dp+spfa
题意: 给定n个点 m条无向边 d元. 以下m行表示每条边 u<=>v 以及花费 w 以下top 以下top行 num c d 表示点标为num的城市 工资为c 健康证价格为d 目标是经过 ...
- 洛谷P2761 软件补丁问题(状压DP,SPFA)
题意 描述不清... Sol 网络流24题里面怎么会有状压dp?? 真是狗血,不过还是简单吧. 直接用$f[sta]$表示当前状态为$sta$时的最小花费 转移的时候枚举一下哪一个补丁可以搞这个状态 ...
- 洛谷P2566 [SCOI2009]围豆豆(状压dp+spfa)
题目传送门 题解 Σ(っ °Д °;)っ 前置知识 射线法:从一点向右(其实哪边都行)水平引一条射线,若射线与路径的交点为偶数,则点不被包含,若为奇数,则被包含.(但注意存在射线与路径重合的情况) 这 ...
- BZOJ 1294 [SCOI2009]围豆豆Bean ——计算几何
显然我们不可能表示出一台路径,因为实在是太复杂了. 所以我们可以记录一下路径对答案的影响,显然路径对答案影响相同的时候,答案更优,所以我们可以用影响来代替路径. 所以我们考虑状压一下所有的豆子有没有被 ...
- 【BZOJ 2595】2595: [Wc2008]游览计划 (状压DP+spfa,斯坦纳树?)
2595: [Wc2008]游览计划 Time Limit: 10 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 1572 Solved: 7 ...
随机推荐
- echart搭配时间轴进行展示 (本例展示的是多时间 多地区 多指标条件 )
1:照常先来几张图 看效果 2:首先 看官方文档 我把echart官方的例子给扒下来并整理了得出如下效果 上 案例图和代码 效果图 : 代码: <style type="text/c ...
- URL地址传参中特殊符号的转码和解码
背景: URL传参在web开发中很常见,一般来说这种方式并不推荐,原因就是浏览器多种多样,各家浏览器对URL地址的解析的表现很不一样,特别是当参数有非ASCII字符.英文字母.阿拉伯数字时. 在CRM ...
- QQ空间相册展示特效
<!doctype html> <html lang="en"> <head> <title>QQ空间相册展示特效<title ...
- 《数据结构与算法分析:C语言描述》复习——第十章“算法设计技巧”——Huffman编码
2014.07.06 16:47 简介: 给定一段有固定符号集合S构成的文本T,集合S中总共有n种符号.如果对于每种符号,使用一种不同的由‘0’和‘1’构成的位字符串来代替,比如: ‘a’->‘ ...
- USACO Section2.2 Party Lamps 解题报告 【icedream61】
lamps解题报告------------------------------------------------------------------------------------------- ...
- vue.js中created方法作用
这是它的一个生命周期钩子函数,就是一个vue实例被生成后调用这个函数.一个vue实例被生成后还要绑定到某个html元素上,之后还要进行编译,然后再插入到document中.每一个阶段都会有一个钩子函数 ...
- An internal error occurred during: "Launching on Tomcat 7.x"
1.首先关闭MyEclipse工作空间.2.然后删除工作空间下的文件.“MyEclipse10\workspace.metadata.plugins\org.eclipse.core.runtime. ...
- jenkins shell脚本构建项目--留
1.echo `date` "doing compling . . . " if [ "$RELEASE" == "false" ]; ...
- Python全栈工程师(异常(基础))
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 Python人工智能从入门到精通 补充:包的相对导入 只对后两种导入方式有用 ...
- Opencv4.0.0安装包
这个资源是Opencv4.0.0安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载