[POJ 2329] Nearest number-2
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相关推荐
- POJ 1330 Nearest Common Ancestors / UVALive 2525 Nearest Common Ancestors (最近公共祖先LCA)...
POJ 1330 Nearest Common Ancestors / UVALive 2525 Nearest Common Ancestors (最近公共祖先LCA) Description A ...
- 简单英文题 26 The Nearest Number(python)
http://noi.openjudge.cn/english/26/ """ 简单英文题 26 The Nearest Number http://noi.openju ...
- D26:The Nearest Number(最接近的数,翻译+题解)
原题:OpenJudge - 26:The Nearest Number 翻译: 描述:给定一个有N个数的数列和K.找到数列中下标最小且与K最接近(X-K的绝对值最小)的数X: 输入:第一行:两个正整 ...
- POJ 1330 Nearest Common Ancestors 【LCA模板题】
任意门:http://poj.org/problem?id=1330 Nearest Common Ancestors Time Limit: 1000MS Memory Limit: 10000 ...
- POJ 2104 K-th Number 主席树(区间第k大)
题目链接: http://poj.org/problem?id=2104 K-th Number Time Limit: 20000MSMemory Limit: 65536K 问题描述 You ar ...
- POJ 2104 K-th Number(区间第k大数)(平方切割,归并树,划分树)
题目链接: http://poj.org/problem? id=2104 解题思路: 由于查询的个数m非常大.朴素的求法无法在规定时间内求解. 因此应该选用合理的方式维护数据来做到高效地查询. 假设 ...
- 【转】POJ 2104 K-th Number(2)
转自: http://huangwei.host7.meyu.net/?p=24 题意:给定序列,求出[s,t]区间内第k小的数字. 解法:线段树+归并排序+二分枚举 Whu回来后,开始好好看了下其余 ...
- POJ 1423 Big Number
题目连接:http://poj.org/problem?id=1423 #include <cmath> #include <queue> #include <stack ...
- poj 1330 Nearest Common Ancestors LCA/DFS
题目链接: http://poj.org/problem?id=1330 题意: 求出两点间的最近公共祖先. 题解: 第一种: 并查集维护:http://www.cnblogs.com/procedu ...
最新文章
- 遴选中计算机类,计算机卓越班遴选办法-计算机学院
- js文件引用 webpack_想了解Webpack,看这篇就够了
- python 提取字符串中的中文字符
- volatile 手摸手带你解析
- 复旦大学肖仰华教授:知识图谱与认知智能 | 附PPT下载
- 三线调速风扇原理_学修电风扇~风机转速慢、调速失灵故障维修。
- 台达plc自由口通讯_台达PLC和ABB机器人Devicenet通讯
- html美甲预约网页制作,教程.html · NFS1077/FNM美甲店 - Gitee.com
- STM32 连续操作flash
- FastReport studio 动态加载数据集 (zhuan)
- 【海康威视】前端开发:【5】PaleMoon苍月浏览器 Web Components Kit 插件支持
- 是如何通过阿里面试的?
- 普通u盘linux不识别,Linux识别不了u盘怎么办
- 荣耀60和荣耀x30max哪个好
- JSPServlet(5)——实现简单的留言簿功能
- 【拦截器】和【过滤器】
- 10Bootstrap5徽章
- 豪杰超级解霸 V8.3 11月18日发布
- 基于SSM的垃圾分类管理系统-含论文【数据库设计、论文、源码、开题报告】
- 单晶FCC金属纳米压痕的晶体塑性有限元仿真