Link:

POJ 2329 传送门

Solution:

比较明显的$dp$,但爆搜好像也能过

用多个方向$dp$来解决此题,最后汇总答案即可

一开始我写了4个,但后来发现只要相反的2个方向即可,同时不用分别记录答案,直接不断更新答案即可

要特别注意对特例的判断:

不能只判断其最近距离相同且最近点相同

仅当$(a1,b1)$和$(a2,b2)$当前都仅有一个最近点且其相同时才不增加权值

否则可能$(a2,b2)$有多个最近点但正好记录了与$(a1,b1)$最近点相同的点

Code:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib> using namespace std; const int MAXN=+,INF=<<;
struct number{int cnt,d,x,y;}dp[MAXN][MAXN];
int n,dat[MAXN][MAXN]; void check(int a,int b,int l,int r)
{
if(dp[a][b].d+<dp[l][r].d)
dp[l][r]=dp[a][b],dp[l][r].d++;
else if(dp[a][b].d+==dp[l][r].d) //注意这里的判断细节
{
if(dp[l][r].cnt== && dp[a][b].cnt== && dp[l][r].x==dp[a][b].x && dp[l][r].y==dp[a][b].y) return;
dp[l][r].cnt+=dp[a][b].cnt; //cnt都为1时才返回
}
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) for(int j=;j<=n;j++)
scanf("%d",&dat[i][j]),dp[i][j].d=INF;
for(int i=;i<=n;i++) for(int j=;j<=n;j++)
{
if(dat[i][j]) dp[i][j].d=,dp[i][j].x=i,dp[i][j].y=j,dp[i][j].cnt=;
check(i,j,i+,j);check(i,j,i,j+);
}
for(int i=n;i>=;i--) for(int j=n;j>=;j--)
{
if(dat[i][j]) dp[i][j].d=,dp[i][j].x=i,dp[i][j].y=j,dp[i][j].cnt=;
check(i,j,i-,j);check(i,j,i,j-);
} for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(dat[i][j]){printf("%d ",dat[i][j]);continue;}
if(dp[i][j].cnt==) printf("%d ",dat[dp[i][j].x][dp[i][j].y]);
else printf("0 ");
}
puts("");
}
return ;
}

Review:

Hack能力不足啊,很多细节还是要多想想

如果多次判断内容相同,就放到函数里去吧

[POJ 2329] Nearest number-2的更多相关文章

  1. [NewTrain 10][poj 2329]Nearest Number - 2

    题面: http://poj.org/problem?id=2329 题解: 这题有很多做法 1. 搜索 复杂度$O(n^4)$ 但是实际上远远达不到这个复杂度 所以可以通过 2. 对于每一个格子,我 ...

  2. 【POJ】2329 Nearest number - 2(搜索)

    题目 传送门:QWQ 分析 在dp分类里做的,然而并不会$ O(n^3) $ 的$ dp $,怒写一发搜索. 看起来是$ O(n^4) $,但仔细分析了一下好像还挺靠谱的? poj挂了,没在poj交, ...

  3. POJ - 1330 Nearest Common Ancestors(基础LCA)

    POJ - 1330 Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %l ...

  4. POJ 1330 Nearest Common Ancestors / UVALive 2525 Nearest Common Ancestors (最近公共祖先LCA)

    POJ 1330 Nearest Common Ancestors / UVALive 2525 Nearest Common Ancestors (最近公共祖先LCA) Description A ...

  5. LCA POJ 1330 Nearest Common Ancestors

    POJ 1330 Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24209 ...

  6. POJ 1330 Nearest Common Ancestors(lca)

    POJ 1330 Nearest Common Ancestors A rooted tree is a well-known data structure in computer science a ...

  7. POJ 2329 (暴力+搜索bfs)

    Nearest number - 2 Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 3943 Accepted: 1210 De ...

  8. POJ-2329 Nearest number - 2(BFS)

    Nearest number - 2 Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4100 Accepted: 1275 De ...

  9. POJ.1330 Nearest Common Ancestors (LCA 倍增)

    POJ.1330 Nearest Common Ancestors (LCA 倍增) 题意分析 给出一棵树,树上有n个点(n-1)条边,n-1个父子的边的关系a-b.接下来给出xy,求出xy的lca节 ...

随机推荐

  1. DDT驱动

    下载ddt并安装 Pip install ddt 或者官网下载安装 http://ddt.readthedocs.io/en/latest/ https://github.com/txels/ddt ...

  2. Mysql忘记root密码怎么办?(已解决)

    为了写这篇文档,假装一下忘记密码!!!! 首先我数据库是正常的,可以使用. root@localhost:~# mysql -uroot -p mysql> mysql> show dat ...

  3. elk-filebeat收集docker容器日志

    目录 使用docker搭建elk filebeat安装与配置 docker容器设置 参考文章 首发地址 使用docker搭建elk 1.使用docker-compose文件构建elk.文件如下: ve ...

  4. CPU指令集不同导致的core分析

    最近程序需要支持CGSL系统运行,测试中发现相同操作系统的两台机器,编译机运行正常,测试机coredump.core信息汇总如下,可以看出是由于测试机不支持编译后的指令导致的问题: Program t ...

  5. django QuerySet 的常用API

    为了加深对queryset对象api的了解,我们建立了以下示例模型: from django.db import models class Author(models.Model): "&q ...

  6. hdu1712 分组背包 ACboy needs your help

    ACboy needs your help Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  7. NAT64与DNS64基本原理概述

    NAT64与DNS64基本原理概述 1.NAT64与DNS64背景     在IPv6网络的发展过程中,面临最大的问题应该是IPv6与IPv4的不兼容性,因此无法实现二种不兼容网络之间的互访.为了实现 ...

  8. [HNOI2015][bzoj4009] 接水果 [整体二分+扫描线]

    题面 传送门 思路 本题其实有在线做法......但是太难写了,退而求其次写了离线 基本思路就是,考虑一个盘子以及它能接到的所有水果 可以发现,这个水果的端点一定在这个盘子两端的"子树&qu ...

  9. POJ 1061 青蛙的约会 | 同余方程和exGcd

    题解: 要求s+px=t+qx (mod L) 移项 (p-q)x=t-s (mod L) 等价于 (p-q)x+Ly=t-s 即ax+by=c的方程最小非负根 exGcd后乘个C #include& ...

  10. 《c程序设计语言》读书笔记-3.4-数字转字符串

    #include <io.h> #include <stdio.h> #include <string.h> #include <stdlib.h> # ...