bfs或者dfs Good Bye 2016 D
http://codeforces.com/contest/750/problem/D
题目大意:
放鞭炮,鞭炮会爆炸n次,每次只会往目前前进方向的左上和右上放出他的子鞭炮。问,最后能有多少格子被覆盖?
思路:
感觉是期末复习阶段太久没有敲代码了的缘故吧,记忆化搜索的状态找的都不准确了。
bfs,然后定义dp(x,y,z,dir)表示在(x,y)这个位置,第z次爆炸,爆炸方向为dir。如果这个状态存在,就不放入队列。
//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker,"/STACK:102400000,102400000")
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define haha printf("haha\n")
/*
定义:dp(x, y, t, dir = 8),当前在坐标(x, y)这个位置,朝向为dir,将要从这点开始走t步(假定,向上是+,向下是-.),是否走过这个状态
*/
const int maxpos = + ;
int dp[maxpos][maxpos][][];
int color[maxpos][maxpos];
int n;
int t[maxpos];
pair<int, int> dir[]; void init(){
cin >> n;
for (int i = ; i <= n; i++){
scanf("%d", t + i);
}
///逆时针标号
dir[] = mk(, ), dir[] = mk(, ), dir[] = mk(-, ), dir[] = mk(-, );
dir[] = mk(-, -), dir[] = mk(, -), dir[] = mk(, -), dir[] = mk(, );
} struct Point{
int x, y, aim;
}; int bfs(){
if (n == ) return t[];
t[n + ] = ;
int x = , y = ;
//dp[x][y + 1][t[1] - 1][1] = 1;
queue<Point> que;
for (int i = ; i <= t[]; i++){
int nx = dir[].fi + x, ny = dir[].se + y;
color[nx][ny] = ;
x = nx, y = ny;
}
//printf("x = %d y = %d\n", x, y);
que.push(Point{x, y, });
que.push(Point{x, y, });
dp[x][y][][] = ;
dp[x][y][][] = ;
for (int i = ; i <= n; i++){
queue<Point> tmp;
while (!que.empty()){
Point from = que.front(); que.pop();
//printf("%d %d\n", from.x, from.y);
for (int j = ; j <= t[i]; j++){
int nx = from.x + dir[from.aim].fi, ny = from.y + dir[from.aim].se;
color[nx][ny] = ;
from.x = nx, from.y = ny;
//printf("nx = %d ny = %d\n", nx, ny);
}
int lb = (from.aim + ) % , rb = (from.aim - + ) % ;
if (dp[from.x][from.y][i][lb] == ){
tmp.push(Point{from.x, from.y, lb});
dp[from.x][from.y][i][lb] = ;
}
if (dp[from.x][from.y][i][rb] == ){
tmp.push(Point{from.x, from.y, rb});
dp[from.x][from.y][i][rb] = ;
}
}
que = tmp;
}
int ans = ;
for (int i = ; i < ; i++){
for (int j = ; j < ; j++){
ans += color[i][j];
//if (color[i][j]) printf("x = %d y = %d\n", i, j);
}
}
return ans;
} int main(){
init();
printf("%d\n", bfs());
return ;
}
bfs或者dfs Good Bye 2016 D的更多相关文章
- HDU-4607 Park Visit bfs | DP | dfs
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先考虑找一条最长链长度k,如果m<=k+1,那么答案就是m.如果m>k+1,那么最 ...
- BFS和DFS详解
BFS和DFS详解以及java实现 前言 图在算法世界中的重要地位是不言而喻的,曾经看到一篇Google的工程师写的一篇<Get that job at Google!>文章中说到面试官问 ...
- 算法录 之 BFS和DFS
说一下BFS和DFS,这是个比较重要的概念,是很多很多算法的基础. 不过在说这个之前需要先说一下图和树,当然这里的图不是自拍的图片了,树也不是能结苹果的树了.这里要说的是图论和数学里面的概念. 以上概 ...
- hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- 算法学习之BFS、DFS入门
算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/19617187 图的存储结构 本文的重点在于图的深度优先搜索(DFS)和广度优先搜索(BFS ...
- ACM__搜素之BFS与DFS
BFS(Breadth_First_Search) DFS(Depth_First_Search) 拿图来说 BFS过程,以1为根节点,1与2,3相连,找到了2,3,继续搜2,2与4,相连,找到了4, ...
- BFS和DFS算法
昨晚刚昨晚华为笔试题,用到了BFS和DFS,可惜自己学艺不精,忘记了实现原理,现在借用大佬写的内容给自己做个提高 转自:https://www.jianshu.com/p/70952b51f0c8 图 ...
- 通俗理解BFS和DFS,附基本模板
1.BFS(宽度优先搜索):使用队列来保存未被检测的节点,按照宽度优先的顺序被访问和进出队列 打个比方:(1)类似于树的按层次遍历 (2)你的眼镜掉在了地上,你趴在地上,你总是先摸离你最近的地方,如果 ...
随机推荐
- poj1173 解题报告
poj1173 解题报告2013-07-21 13:31 by 期待 ., 42 阅读, 0 评论, 收藏, 编辑 http://poj.org/problem?id=1173 发现此题资料甚少,斗胆 ...
- .Net 中的反射机制
.Net 中的反射机制 概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能. 运行时类型标识 运行时类型标 ...
- phpcms 2008 后台发文章chrome和firefox文章不能上传图片的问题
/web/fckeditor/editor/dialog/fck_image.html /web/fckeditor/editor/dialog/fck_image/fck_image.js 这两个文 ...
- JS —— 轮播图中的缓动函数的封装
轮播图的根本其实就是缓动函数的封装,如果说轮播图是一辆跑动的汽车,那么缓动函数就是它的发动机,今天本文章就带大家由简入繁,封装属于自己的缓动函数~~ 我们从需求的角度开始,首先给出一个简单需求: 1. ...
- LaTeX入门教程
LaTeX(LATEX,音译"拉泰赫")是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在20世纪80年代初期开发,利用这种格式,即使使用 ...
- abstract class与interface的区别与联系
1.相同点:A. 两者都是抽象类,都不能实例化.B. interface实现类及abstract class的子类都必须要实现已经声明的抽象方法. 2. 不同点:A. interface需要实现,要用 ...
- 爬虫关于ip管理池的应用
在爬虫的时候经常会遇到一个问题就是ip被封,由于ip对网站的短时间大量请求,让网站将我们的ip暂时封掉.这样我们就无法全部爬取自己想要的内容. 这里百度了一下解决办法,很多人都提到了ip代理管理池的问 ...
- Base64加密与解密
import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder; // 将 str进行 BASE64 编码 public static Stri ...
- Spark Wordcount
1.Wordcount.scala(本地模式) package com.Mars.spark import org.apache.spark.{SparkConf, SparkContext} /** ...
- [Jenkins]admin用户登陆,提示登陆无效(之前登陆OK,三天没有登陆,突然提示登陆无效,重启无法解决)的解决方法
问题出现现象: 系统一直正常,突然某天登陆,提示用户无效,无法登陆成功. 问题分析过程: 1.查看日志:/var/log/jenkins/jenkins.log(通过ps -elf | grep je ...