[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 ...
随机推荐
- form表单提交和重置小结
1. input标签 1.1>input[type=submit] <form name="form" method="post" action=& ...
- Android (shape,gradient)使用总结
设置背景色可以通过在res/drawable里定义一个xml,如下: <?xml version="1.0" encoding="utf-8"?> ...
- SSH集成cxf 发布restful webservice
首先讲一下什么是restful webservice ,这个问题网上一搜有很多博文去长篇大论的介绍它,但是最后你看完了也会觉得云里雾里的,所以我在这里简单的讲一下我理解的rest webservice ...
- SQLite3中dos命令下退出"...>"状态的方法
今天在看Android中SQLite,跟着书上一步一步走,在dos中敲命令时候不小心敲错了,命令行就会突然变成”…>”这样的,本来是”sqlite>”的,然后接下来后面的就没办法在继续操作 ...
- freemaker参考地址
https://zhidao.baidu.com/question/1304215193023416939.html
- linux shell 总结 (整理)
ls /usr/bin/ info #路径操作 dirname basename #“”和‘’与 ` ` 在shell变量中的区别 “ ” 允许通过$符引用其他变量 ‘’禁止引用其他变量符,视为普通字 ...
- Entity Framework(二)
1. ORM :Object Relation Mapping ,通俗说:用操作对象的方式来操作数据库. 2. 插入数据不再是执行Insert,而是类似于 Person p=new Person() ...
- HTTP 返回状态代码详细解释
一:1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. 100(继续)请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分:101(切换协议)请求者已要 ...
- 当网卡收到一个包的目的地址是本主机其他接口的IP时.2
arp包进入主机后要经过的过滤是:rp_filter rp_filter会过滤网段 所以说不要在进行arp_ignore测试的时候把rp_filter设置成2, 此时就不会对源地址进行路由的检查了 然 ...
- 【bzoj4881】[Lydsy2017年5月月赛]线段游戏 树状数组+STL-set
题目描述 quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成 ...