UVA 12510/CSU 1119 Collecting Coins DFS
前年的省赛题,难点在于这个石头的推移不太好处理
后来还是看了阳神当年的省赛总结,发现这个石头这里,因为就四五个子,就暴力dfs处理即可。先把石头当做普通障碍,进行一遍全图的dfs或者bfs,找到可以找的点,然后dfs每次探索新区域的新点即可,想通了这里很好做了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char mat[][];
int vis[][];
int rock[][],cnt;
int n,m;
int dir[][]={{,},{-,},{,},{,-}};
int inq[];
int res,sum;
void dfs1(int sx,int sy,int col)
{
vis[sx][sy]=col;
for (int i=;i<;i++){
int nx=sx+dir[i][];
int ny=sy+dir[i][];
if (nx< || nx>=n || ny< || ny>=m) continue;
if (vis[nx][ny]) continue;
if (mat[nx][ny]=='O'|| mat[nx][ny]=='X') continue; if(mat[nx][ny]=='C'){
res++;
}
dfs1(nx,ny,col);
}
}
void back(int x,int y,int col)
{
vis[x][y]=;
for (int i=;i<;i++){
int nx=x+dir[i][];
int ny=y+dir[i][];
if (nx< || ny< || nx>=n || ny>=m) continue;
if (vis[nx][ny]!=col) continue;
back(nx,ny,col);
} }
int maxn,ans;
void proc(int num)
{
char cc;
if (num>=cnt) return;
for (int i=;i<cnt;i++){
if (inq[i]) continue;
inq[i]=;
int x=rock[i][];
int y=rock[i][];
for (int j=;j<;j++){
int dx=x+dir[j][];
int dy=y+dir[j][];
if (dx< || dx>=n || dy< || dy>=m) continue;
if (mat[dx][dy]=='X') continue;
if (!vis[dx][dy]) continue;
int tx=x-dir[j][];
int ty=y-dir[j][];
if (tx< || tx>=n || ty< || ty>=m) continue;
if (mat[tx][ty]!='.' && !vis[tx][ty]) continue;
cc=mat[tx][ty];
mat[tx][ty]='O';
mat[x][y]='.';
res=;
dfs1(x,y,i+);
maxn+=res;
int tmp=res;
ans=max(ans,maxn);
proc(num+);
back(x,y,i+);
maxn-=tmp;
mat[tx][ty]=cc;
mat[x][y]='O';
}
proc(num+);
inq[i]=;
} }
int main()
{
int t,sx,sy;
scanf("%d",&t);
while (t--)
{
cnt=;
scanf("%d%d",&n,&m);
for (int i=;i<n;i++){
scanf("%s",mat[i]);
for (int j=;j<m;j++){
vis[i][j]=;
if (mat[i][j]=='S'){
sx=i;sy=j;mat[i][j]='.';
}
else
if (mat[i][j]=='O'){
rock[cnt][]=i;
rock[cnt++][]=j;
}
}
}
res=;
dfs1(sx,sy,);
sum=res;
maxn=,ans=;
memset(inq,,sizeof inq);
proc();
ans+=sum;
printf("%d\n",ans);
}
return ;
}
UVA 12510/CSU 1119 Collecting Coins DFS的更多相关文章
- CSU 1119 Collecting Coins
bfs+dfs 很复杂的搜索题. 因为数据很小,rock最多只有5个,coin最多只有10个,移动rock最多4^5=1024种状态: 思路: 每次先把当前状态能拿到的coin拿走,并将地图当前位置设 ...
- csuoj 1119: Collecting Coins
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1119 1119: Collecting Coins Time Limit: 3 Sec Memo ...
- UVA.839 Not so Mobile ( 二叉树 DFS)
UVA.839 Not so Mobile ( 二叉树 DFS) 题意分析 给出一份天平,判断天平是否平衡. 一开始使用的是保存每个节点,节点存储着两边的质量和距离,但是一直是Runtime erro ...
- UVa 12118 检查员的难题(dfs+欧拉回路)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 开篇,UVA 755 && POJ 1002 487--3279 (Trie + DFS / sort)
博客第一篇写在11月1号,果然die die die die die alone~ 一道不太难的题,白书里被放到排序这一节,半年前用快排A过一次,但是现在做的时候发现可以用字典树加深搜,于是乐呵呵的开 ...
- UVA - 524 Prime Ring Problem(dfs回溯法)
UVA - 524 Prime Ring Problem Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & % ...
- UVA 572 Oil Deposits油田(DFS求连通块)
UVA 572 DFS(floodfill) 用DFS求连通块 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format: ...
- Uva 167 The Sultan's Successors(dfs)
题目链接:Uva 167 思路分析:八皇后问题,采用回溯法解决问题. 代码如下: #include <iostream> #include <string.h> using n ...
- UVA 539 The Settlers of Catan dfs找最长链
题意:画边求最长链,边不能重复数点可以. 很水,用暴力的dfs即可,因为数据不大. 本来以为可以用floyd进行dp的,后来想想好像不能在有回路上的图跑...于是没去做. #include <c ...
随机推荐
- Java基础 -2.2
整形数据 保存的范围由小到大:byte.short.int.long 在java中任何的一个整型常量 那么其默认的类型都是int型(只要是整数就是int类型的数据). public class ex1 ...
- tensorflow版helloworld---拟合线性函数的k和b(02-4)
给不明白深度学习能干什么的同学,感受下深度学习的power import tensorflow as tf import numpy as np #使用numpy生成100个随机点 x_data=np ...
- 树莓派4B踩坑指南 - (4)输入法和字体
输入法和字体 fcitx 安装谷歌输入法和sunpinyin,哪个不用可以装完卸载: sudo apt-get install fcitx fcitx-googlepinyin fcitx-modul ...
- 移动端一像素边框解决方案[css scale]
新建一个border.css的文件,然后将代码复制粘贴,然后引用border.css样式文件,然后给需要添加边框的元素,加相应的类样式. tips: border-bottom[一像素下边框]:bor ...
- redis 之 redis主从复制
Redis集群中的数据库复制是通过主从同步来实现的 主节点(Master)把数据分发给从节点(Slave) 主从同步的好处在于高可用,Redis节点有冗余设计 主从复制的原理:1. 从服务器向主服务器 ...
- Python入门之元组
一.什么是元祖 元祖是不可变类型(列表是可变类型) 为什么要设计元祖这样不可变类型?因为一旦创建了不可变类型的对象,对象内部的所有数据就不能被修改了,这样避免了 由于修改数据导致的错误.此外,对于不可 ...
- FLASK - 请求和响应
请求都封装在request对象里面了 from flask import Flask from flask import request from flask import render_templa ...
- 修改iso ghost xp镜像 ie主页
使用ghost explorer把镜像中在"Documents and SettingsAdministrator"里的文件"NTUSER.DAT",提取出来, ...
- Date.parse在IE/Firefox下有兼容性问题
原因: IE和Firefox是不支持含有'-'字符的日期格式,如:"2018-11-23" 解决方法: 日期格式 'yyyy-mm-dd' 改成 'yyyy/mm/dd' 代码: ...
- 格式化JSON插件
参考:https://www.cnblogs.com/whycxb/p/7126116.html