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=200+10,INF=1<<27;
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+1<dp[l][r].d) dp[l][r]=dp[a][b],dp[l][r].d++;else if(dp[a][b].d+1==dp[l][r].d)  //注意这里的判断细节
    {if(dp[l][r].cnt==1 && dp[a][b].cnt==1 && 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=1;i<=n;i++) for(int j=1;j<=n;j++)scanf("%d",&dat[i][j]),dp[i][j].d=INF;for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){if(dat[i][j]) dp[i][j].d=0,dp[i][j].x=i,dp[i][j].y=j,dp[i][j].cnt=1;check(i,j,i+1,j);check(i,j,i,j+1);            }for(int i=n;i>=1;i--) for(int j=n;j>=1;j--){if(dat[i][j]) dp[i][j].d=0,dp[i][j].x=i,dp[i][j].y=j,dp[i][j].cnt=1;check(i,j,i-1,j);check(i,j,i,j-1);}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(dat[i][j]){printf("%d ",dat[i][j]);continue;} if(dp[i][j].cnt==1) printf("%d ",dat[dp[i][j].x][dp[i][j].y]);else printf("0 ");}puts("");}return 0;
}

Review:

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

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

转载于:https://www.cnblogs.com/newera/p/9157292.html

[POJ 2329] Nearest number-2相关推荐

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

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

  2. 简单英文题 26 The Nearest Number(python)

    http://noi.openjudge.cn/english/26/ """ 简单英文题 26 The Nearest Number http://noi.openju ...

  3. D26:The Nearest Number(最接近的数,翻译+题解)

    原题:OpenJudge - 26:The Nearest Number 翻译: 描述:给定一个有N个数的数列和K.找到数列中下标最小且与K最接近(X-K的绝对值最小)的数X: 输入:第一行:两个正整 ...

  4. POJ 1330 Nearest Common Ancestors 【LCA模板题】

    任意门:http://poj.org/problem?id=1330 Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000 ...

  5. POJ 2104 K-th Number 主席树(区间第k大)

    题目链接: http://poj.org/problem?id=2104 K-th Number Time Limit: 20000MSMemory Limit: 65536K 问题描述 You ar ...

  6. POJ 2104 K-th Number(区间第k大数)(平方切割,归并树,划分树)

    题目链接: http://poj.org/problem? id=2104 解题思路: 由于查询的个数m非常大.朴素的求法无法在规定时间内求解. 因此应该选用合理的方式维护数据来做到高效地查询. 假设 ...

  7. 【转】POJ 2104 K-th Number(2)

    转自: http://huangwei.host7.meyu.net/?p=24 题意:给定序列,求出[s,t]区间内第k小的数字. 解法:线段树+归并排序+二分枚举 Whu回来后,开始好好看了下其余 ...

  8. POJ 1423 Big Number

    题目连接:http://poj.org/problem?id=1423 #include <cmath> #include <queue> #include <stack ...

  9. poj 1330 Nearest Common Ancestors LCA/DFS

    题目链接: http://poj.org/problem?id=1330 题意: 求出两点间的最近公共祖先. 题解: 第一种: 并查集维护:http://www.cnblogs.com/procedu ...

最新文章

  1. 遴选中计算机类,计算机卓越班遴选办法-计算机学院
  2. js文件引用 webpack_想了解Webpack,看这篇就够了
  3. python 提取字符串中的中文字符
  4. volatile 手摸手带你解析
  5. 复旦大学肖仰华教授:知识图谱与认知智能 | 附PPT下载
  6. 三线调速风扇原理_学修电风扇~风机转速慢、调速失灵故障维修。
  7. 台达plc自由口通讯_台达PLC和ABB机器人Devicenet通讯
  8. html美甲预约网页制作,教程.html · NFS1077/FNM美甲店 - Gitee.com
  9. STM32 连续操作flash
  10. FastReport studio 动态加载数据集 (zhuan)
  11. 【海康威视】前端开发:【5】PaleMoon苍月浏览器 Web Components Kit 插件支持
  12. 是如何通过阿里面试的?
  13. 普通u盘linux不识别,Linux识别不了u盘怎么办
  14. 荣耀60和荣耀x30max哪个好
  15. JSPServlet(5)——实现简单的留言簿功能
  16. 【拦截器】和【过滤器】
  17. 10Bootstrap5徽章
  18. 豪杰超级解霸 V8.3 11月18日发布
  19. 基于SSM的垃圾分类管理系统-含论文【数据库设计、论文、源码、开题报告】
  20. 单晶FCC金属纳米压痕的晶体塑性有限元仿真

热门文章

  1. 好技术领导和差技术领导区别在哪里
  2. CentOS安装sshd服务
  3. 分布式系统事务一致性解决方案
  4. java基础之Object类和异常
  5. java ListString 转换成带逗号的字符串
  6. 盘点springmvc的常用接口
  7. PHP curl_setopt函数用法介绍中篇
  8. 500 OOPS:cannot change directory:/root 问题
  9. lombok 不用再写pojo的getset
  10. 快刀斩“乱码”,你需要这些套路!