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 ...
随机推荐
- 1009 Product of Polynomials (25分) 多项式乘法
1009 Product of Polynomials (25分) This time, you are supposed to find A×B where A and B are two po ...
- Python流程控制-3 循环控制
循环控制,就是让程序循环运行某一段代码直到满足退出的条件,才退出循环. Python用关键字for和while来进行循环控制,但是没有其它语言的do...while语句(在Java和PHP中都有do ...
- jdk动态代理和cglib动态代理底层实现原理超详细解析(jdk动态代理篇)
代理模式是一种很常见的模式,本文主要分析jdk动态代理的过程 1.举例 public class ProxyFactory implements InvocationHandler { private ...
- Codeforces Round #579 (Div. 3)D(字符串,思维)
#include<bits/stdc++.h>using namespace std;char s[200007],t[200007];int last[200007][27],nxt[2 ...
- Linux centos7 VMware Apache访问日志不记录静态文件、访问日志切割、静态元素过期时间
一.Apache访问日志不记录静态文件 网站大多元素为静态文件,如图片.css.js等,这些元素可以不用记录 vim /usr/local/apache2.4/conf/extra/httpd-vho ...
- 「CQOI2011」动态逆序对
「CQOI2011」动态逆序对 传送门 树套树. 删除一个位置的元素带来的减损数等于他前面大于它的和后面小于它的,然后这个直接树状数组套主席树维护一下就好了. 参考代码: #include <c ...
- 你需要知道的 JavaScript 类(class)的这些知识
作者: Dmitri Pavlutin译者:前端小智来源:dmitripavlutin 点赞再看,养成习惯 本文 GitHub https://github.com/qq44924588... 上已经 ...
- SCP 上传
https://www.runoob.com/linux/linux-comm-scp.html scp 当前路径(绝对路径) root@xx.xx.xx :/xx/xx/xx/
- Vue中img标签src属性绑定
最近刚刚完成了自己的毕业设计项目,整理一下过程中遇到的问题吧~~~ 我做的是一个基于Vue的信息资讯展示与管理平台,显示首页.详情页等的文章内容时就涉及到了图片展示,项目初始时我搭建的是静态网页结构, ...
- 回顾PHP:第一章:PHP基础语法
第一章:PHP基础语法 一.常量: 1.1.define()函数:define(‘R’,’5’,’true’); //R:常量名,5:常量值,true:常量名对大小写不敏感,为false时表示对常量名 ...