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 ...
随机推荐
- 杭电2014 (第一次用vector ac题目)
早就想用容器类来实现一些编程,今天也算是学了一点吧. vector的使用方法参考了某位博主的一篇文章,感觉写得还是不错的:http://blog.csdn.net/always2015/article ...
- 获取Webshell方法总结
一.CMS获取Webshell方法 搜索CMS网站程序名称 eg:phpcms拿webshell.wordpress后台拿webshell 二.非CMS获取Webshell方法 2.1数据库备份获取W ...
- js给元素添加样式[addClass][hasClass]
function addClass(el, className) { if (hasClass(el, className)) { return } let newClass = el.classNa ...
- [PHP] PHP7已经删除了preg_replace的e修饰符
官网提示是这样的,对/e修饰符的支持已删除.请改用preg_replace_callback()原因是/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码( ...
- CSS - 去除图片img底侧空白缝隙
1. 图片底部有空隙 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 应用内打开AppStore上某个应用的下载界面--SKStoreReviewController的使用
产品设计要求是这样的: 对应的初步代码是这样的: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after ...
- 为常用的块类型创建typedef
本文概要: 1.块类型的语法结构 2.使用C语言中的“类型定义”的特性.使用typedef关键字用于给块类型起个别名 3.使用typedef好处之一是,重构块的类型签名时只需要改一处就行了,避免遗留b ...
- 单页面应用程序(SPA)的优缺点
我们通常所说的单页面应用程序通常通过前端框架(angular.react.vue)进行开发,单页面应用程序将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML.JavaScr ...
- redis api-list
- ch6 列表和导航条
为列表添加定制的项目符号 可使用list-style-image属性:缺点是对项目符号图像的位置的控制能力不强. 常用的方法:使用list-style-type来关闭项目符号,将定制的项目符号作为背景 ...