【GDOI2016模拟3.15】圈地游戏

SOL:

BFS式dp。

#include<bits/stdc++.h>
using namespace std;
struct state{int x,y,z;state(){}state(int _x,int _y,int _z):x(_x),y(_y),z(_z){}}X;
queue<state> Q;
const int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
int x,y,anw,sp,sta[18],ans,f[23][23][1<<8|1],n,m,p[23][23],val[18],px,ox[18],oy[18],xoxo;
char s[27][27];
void sol(int i) {
    anw=0;
    for (int j=0;j<sp;j++)
      if ((i>>j)&1) {if (sta[j]==-1) return;
       anw+=val[sta[j]];
    }
    ans=max(ans,anw-f[x][y][i]);
}
void dowork() {
    for (int i=1;i<=n;i++)
     for (int j=1;j<=m;j++)
      if (s[i][j]==‘B‘||isdigit(s[i][j]))
       (sta[sp]=(isdigit(s[i][j])?px++,s[i][j]-48:-1)),ox[sp]=i,oy[sp++]=j;
      else if (s[i][j]==‘S‘) x=i,y=j;
    for (int i=1;i<=px;i++) scanf("%d",val+i);
    for (int i=1;i<=n;i++)
     for (int j=1;j<=m;j++)
      for (int k=0;k<sp;k++)
       if (i<ox[k]&&j==oy[k]) p[i][j]|=1<<k;
}
int top;
signed main () {
//    freopen("2.in","r",stdin);
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++) scanf("%s",s[i]+1);
    dowork();
    memset(f,127,sizeof f);
    f[x][y][0]=0; Q.push(state(x,y,0));
    while (!Q.empty()) {
        X=Q.front(); Q.pop();
//        if (X.x==5&&X.y==1&&X.z==13) {
//            top=0;
//        }
//        cout<<X.x<<‘ ‘<<X.y<<‘ ‘<<X.z<<endl;
        for (int i=0;i<4;i++) {
            int nx=X.x+dx[i], ny=X.y+dy[i];
            if (s[nx][ny]!=‘.‘&&s[nx][ny]!=‘S‘) continue;
            if (nx<1||nx>n||ny<1||ny>m) continue;
            xoxo=X.z;
            if (i==1) xoxo=X.z^p[X.x][X.y];
            if (i==3) xoxo=X.z^p[nx][ny];
            if (f[nx][ny][xoxo]>f[X.x][X.y][X.z]+1) {
                f[nx][ny][xoxo]=f[X.x][X.y][X.z]+1;
                Q.push(state(nx,ny,xoxo));
//                if (++top<30) cout<<"exd"<<nx<<‘ ‘<<ny<<‘ ‘<<xoxo<<endl;
            }
        }
    }
    for (int i=0;i<(1<<sp);i++)  sol(i);
    printf("%d\n",ans);
}

原文地址:https://www.cnblogs.com/rrsb/p/9335821.html

时间: 2024-11-16 20:48:11

【GDOI2016模拟3.15】圈地游戏的相关文章

BZOJ3232: 圈地游戏

题解: 神题一道... 题解戳这里:http://hi.baidu.com/strongoier/item/0425f0e5814e010265db0095 分数规划可以看这里:http://blog.csdn.net/hhaile/article/details/8883652 无限orzzzzz 代码:实数网络流真蛋疼... 1 #include<cstdio> 2 3 #include<cstdlib> 4 5 #include<cmath> 6 7 #inclu

【BZOJ3232】圈地游戏 分数规划+最小割

[BZOJ3232]圈地游戏 Description DZY家的后院有一块地,由N行M列的方格组成,格子内种的菜有一定的价值,并且每一条单位长度的格线有一定的费用. DZY喜欢在地里散步.他总是从任意一个格点出发,沿着格线行走直到回到出发点,且在行走途中不允许与已走过的路线有任何相交或触碰(出发点除外).记这条封闭路线内部的格子总价值为V,路线上的费用总和为C,DZY想知道V/C的最大值是多少. Input 第一行为两个正整数n,m. 接下来n行,每行m个非负整数,表示对应格子的价值. 接下来n

BZOJ 3232: 圈地游戏 分数规划+判负环

3232: 圈地游戏 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 966  Solved: 466[Submit][Status][Discuss] Description DZY家的后院有一块地,由N行M列的方格组成,格子内种的菜有一定的价值,并且每一条单位长度的格线有一定的费用. DZY喜欢在地里散步.他总是从任意一个格点出发,沿着格线行走直到回到出发点,且在行走途中不允许与已走过的路线有任何相交或触碰(出发点除外).记这条封闭路线内部的格

OpenCV2马拉松第15圈——边缘检测(Laplace算子,LOG算子)

收入囊中 拉普拉斯算子 LOG算子(高斯拉普拉斯算子) OpenCV Laplacian函数 构建自己的拉普拉斯算子 利用拉普拉斯算子进行图像的锐化 葵花宝典 在OpenCV2马拉松第14圈--边缘检测(Sobel,prewitt,roberts)  我们已经认识了3个一阶差分算子 拉普拉斯算子是二阶差分算子,为什么要加入二阶的算子呢?试想一下,如果图像中有噪声,噪声在一阶导数处也会取得极大值从而被当作边缘.然而求解这个极大值也不方便,采用二阶导数后,极大值点就为0了,因此值为0的地方就是边界.

Cisco PT模拟实验(15) 路由器的Loopback远程登录配置

Cisco PT模拟实验(15) 路由器的Loopback远程登录配置 实验目的: 掌握路由器Loopback接口的特点及作用 掌握Loopback接口的配置,实现对路由器的Telnet登录 掌握RIP动态路由和默认路由的基本配置 实验背景: 随着公司的网络环境日趋复杂,作为网络管理员,需要合理分配公司有限的网络资源(IP地址等),当网络设备发生故障时,仍能稳定地远程登录到设备进行管理,此时配置Loopback接口显得尤为重要. 技术原理: 环回(Loopback)接口,是一种应用最为广泛的虚拟

《C++ Qt 设计模式》8|15拼图 小游戏的简单实现。拜托,别乱点!

第零章:介绍 看到这个游戏了,感觉蛮好玩的,实现了一下. 界面如下: 游戏玩法:在3×*3的矩阵中,每个按钮都可以点击,如果按钮四周有一个是空白,则点击此按钮则会移动到这个空白.按钮字母顺序变成“ABCD……”这样有序就赢了,最后空格可以出现在任何地方. 第一章:构思 设计模式基本上没接触过,所以就没有按书上的方式,自己想了大概要怎么实现,可能自己像的没有它给出的方式好吧,但是毕竟是菜鸟嘛,一步一步来! 1.用什么装这些按钮 学习了QGridLayOut,“The QGridLayout cla

微信游戏圈小游戏源码共享下载

源码数量不少于300套!持续更新中! 皇家VIP群入会费请咨询QQ   截止于2014-10-18,更新的一些游戏截图   截止于2014-10-13,微信小游戏VIP交流群已经共享的源码截图 列举一下部分游戏的名称: 随意门(屌丝版) 植物大战僵尸 逼死强迫症2 胸口碎大石 粉绿男女 打击者 黄金矿工 反腐小王子 转你妹 纸飞机 狂射iphone6 小兔子快快跑 跳跳狗 扫雷 奇葩连连看 看你有多花 开心消消乐 进化 拯救精子 打老虎 色域迷惑人 厕纸挑战 气球砰砰砰 横冲直闯 疯狂飙车 粑粑

国外15种手机游戏引擎和开发工具介绍

游戏程序 平台类型: iOS Android  程序设计: 3D图形 音乐音效  编程语言:   引擎/SDK: 其它  工欲善其事,必先利其器.对移动游戏开发者来说,高效实用的开发工具必不可少.近日,英国著名产业杂志<Develop>刊出了一篇文章,作者艾伦·李在文中推荐了15种移动游戏开发工具,从游戏引擎,到音效制作.推广等工具都有涉及.以下为原文主要内容编译. 引擎和移动开发工具包 Marmalade 简介:Marmalade被很多人认为是跨平台制作C++游戏的最佳平台.通过Marmal

模拟算法_掷骰子游戏&amp;&amp;猜数游戏

模拟算法是用随机函数来模拟自然界中发生的不可预测的情况,C语言中是用srand()和rand()函数来生成随机数. 先来介绍一下随机数的生成: 1.产生不定范围的随机数 函数原型:int rand() 产生一个介于0~RAD_MAX间的整数,其具体值与系统有关系.Linux下为2147483647.我们可以在include文件夹中的stdlib.h中可以看到(Linux在usr目录下,Windows在安装目录下) 1 #include<stdio.h> 2 #include<stdlib