BZOJ 1294 [SCOI2009]围豆豆Bean

2023-10-09 04:38
文章标签 bean bzoj 1294 scoi2009 豆豆

本文主要是介绍BZOJ 1294 [SCOI2009]围豆豆Bean,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

Input

第一行两个整数N和M,为矩阵的边长。第二行一个整数D,为豆子的总个数。第三行包含D个整数V1到VD,分别为每颗豆子的分值。接着N行有一个N×M的字符矩阵来描述游戏矩阵状态,0表示空格,#表示障碍物。而数字1到9分别表示对应编号的豆子。

Output

仅包含一个整数,为最高可能获得的分值。

Sample Input

3 8
3
30 -100 30
00000000
010203#0
00000000

Sample Output

38

HINT

50%的数据满足1≤D≤3。

100%的数据满足1≤D≤9,1≤N, M≤10,-10000≤Vi≤10000。


这个题呀,好题。

可以边搜索边更新状态,用射线法(自己百度吧)。


#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
int n,m,d,ans,v[11],mp[11][11],x[11],y[11],dis[1105][11][11];
bool inq[1105][11][11];
int xx[]={-1,0,1,0},yy[]={0,-1,0,1};
struct node
{int x,y,z;//x,y坐标,z吃豆子的情况 
};
queue<node>q;
void bfs(int sx,int sy)
{memset(dis,0x3f,sizeof(dis));memset(inq,0,sizeof(inq));node t;dis[0][sx][sy]=0;t.x=sx,t.y=sy,t.z=0;q.push(t);inq[0][sx][sy]=1;while(!q.empty()){node u=q.front();q.pop();inq[u.z][u.x][u.y]=0;for(int i=0;i<=3;i++)if(u.x+xx[i]>=1&&u.x+xx[i]<=n&&u.y+yy[i]>=1&&u.y+yy[i]<=m&&mp[u.x+xx[i]][u.y+yy[i]]==0){t.x=u.x+xx[i],t.y=u.y+yy[i],t.z=u.z;for(int j=1;j<=d;j++)if(t.y>y[j]&&((u.x>x[j]&&t.x<=x[j])||(u.x<=x[j]&&t.x>x[j])))//垂直于x轴的射线 t.z^=(1<<(j-1));if(dis[t.z][t.x][t.y]>dis[u.z][u.x][u.y]+1){dis[t.z][t.x][t.y]=dis[u.z][u.x][u.y]+1;if(!inq[t.z][t.x][t.y]){inq[t.z][t.x][t.y]=1;q.push(t);}}}}int end=(1<<d)-1;for(int i=1;i<=end;i++){int tmp=-dis[i][sx][sy];for(int j=1;j<=d;j++)if(i&(1<<(j-1)))tmp+=v[j];ans=max(tmp,ans);}
}
int main()
{scanf("%d%d%d",&n,&m,&d);for(int i=1;i<=d;i++)scanf("%d",&v[i]);for(int i=1;i<=n;i++){char s[15];scanf("%s",s+1);for(int j=1;j<=m;j++)if(s[j]=='#')mp[i][j]=1;else if(s[j]=='0')mp[i][j]=0;else{mp[i][j]=1;x[s[j]-'0']=i;y[s[j]-'0']=j;}}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(mp[i][j]==0)bfs(i,j);printf("%d\n",ans);return 0;
}


这篇关于BZOJ 1294 [SCOI2009]围豆豆Bean的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/170392

相关文章

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

读Spring实战(第四版)概括—装配Bean

很久很久以前读过Spring实战(第三版),因为第三版和第四部差异还是特别明显的,在整体思想上有了比较重大的改变,比如用注解和JavaConfig替换Xml以及现在非常火热的Springboot在书的最后也有提到。OK,开始看书,书本的第一章讲了一下Spring存在的目的(简化Java开发)和Spring的功能,以及Spring3->Spring4增加了哪些功能,那我就从第二章开始概括本书,以给我

spring—使用注解配置Bean

从Spring2.5开始,出现了注解装配JavaBean的新方式。注解可以减少代码的开发量,spring提供了丰富的注解功能,现在项目中注解的方式使用的也越来越多了。   ** 开启注解扫描          Spring容器默认是禁用注解配置的。打开注解扫描的方式主要有两种: <context:component-scan>组件扫描和<context:annotation

spring—Bean配置

Spring是一个开源的框架,其目标是简化java的开发。为了降低Java开发的复杂性,Spring有如下的特性: >> 基于POJO的轻量级和最小侵入性编程 >> 通过依赖注入和面向接口编程实现松耦合 >> 基于切面和惯例进行声明式编程 >> 通过切面和模板减少样板式代码   Spring的六大模块:核心Spring容器、Spring的AOP模块、数据访问与集成、Web和远程调用以及

spring笔记 Bean实例化的机制

refresh方法定义了处理过程 关键词:工厂后处理器  Bean后处理器 消息源 上下文事件广播器 *初始化其他特殊Bean 上下文刷新事件 IOC流水线137页    加载配置信息    解析配置文件    使用反射识别 Bean的定义 属性编辑器注册表    Bean实例化    Bean属性的设置    Bean后续加工 spring组件的2类角色    物料组件 Resource Bea

spring Bean的配置方法笔记

spring Bean配置 主要是4 5章 Bean配置 Bean id class     问题1 id和name有什么区别?1 name的命名限制少一些 4.2.2;2 id必须唯一,name可以不唯一。     geBean(id或name),name的话返回最后一个name对应的。 IOC容器 Bean的注入:     1 属性注入 通过serXxx()方法注入Bean的属性值或依赖的

Spring-@Bean的处理流程

@Bean前置知识 1 需要再Configuration Class中才能被解析 2 静态@Bean也就是标注在static方法上的 实例@Bean标注在普通方法上的 所有的Bean在创建之前都会变成BeanDefinition,其中有这样两个属性: setFactoryMethodName:静态方法 setFactoryBeanName:指定工厂Bean名称 处理流程 首先在创建上下文的

【大数据Java基础-JAVA 面向对象09】类成员(三)类的结构:构造器(一)简介;属性赋值顺序;JavaBean的概念

1.构造器(或构造方法):Constructor 构造器的作用: 1.创建对象 2.初始化对象的信息   2.使用说明: 1.如果没显式的定义类的构造器的话,则系统默认提供一个空参的构造器 2.定义构造器的格式:权限修饰符 类名(形参列表){} 3.一个类中定义的多个构造器,彼此构成重载 4.一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器 5.一个类中,至少会有一个构

【Java】实体类Javabean的运用案例

文章目录 前言一、定义一个操作类专门处理数据二、代码总结 前言 实体类Javabean的运用案例,现在需要把数据与业务串联起来。 一、定义一个操作类专门处理数据 这里定义了一个叫DogOperator的类,专门用来处理Dog类里面的数据。 解析: 要把Dog类里面的数据拿到DogOperator类当做运用,那么首先要有个关联关系,那么用什么去关联呢?我们要获取一

使用jackson 进行json字符串转java bean报错

今天在使用jackson 进行json字符串转java bean的时候一直报错,多次查过代码并没有发现什么错误,仔细看了一下报错信息,去网上查找了一下原因,最后发现是缺少无参的构造函数,添加无参构造函数后,项目正常运行。报错信息如下图: