Day3:T1数论+高精 T2搜索
T1:数论+高精(水~)
根据题意可知,从除的数越大越好(在0~9中)
所以我们只要用到高精除然后再模拟一下就可以了
//MARK:但是要注意0-9这个特殊值需要特判,因为题目要求输出的数至少是两位数,所以0-9的数输出的时候应该在前面加上1.如果1的时候应该输出11,而不是1;
T2:宽搜+深搜
典型的搜索题
因为有点忘了dfs所以还是学习了一下
其实之前一直以为bfs和dfs没有什么本质上的区别吧(除了时间复杂上的差异),学了强连通分量,以及这道题之后还是发现有很大不同的
说说这道题吧,bfs是用来求x点到其他点的最短路(当然也可以用其他求最短路的方法),dfs是用来求以某一个点出发遍历一遍所走的步数
那么dfs可以用bfs来代替么?
答案是你最好不要傲娇这样做...
bfs其实是一个队列的操作,dfs是一个回溯过程,然后找从哪一点出发步数最短,这样状态需要及时转移的情况,当然是dfs更好写一点
然后这一题题目略坑...
注意理解题目中的最后回到起点中所说的起点。这个起点并不是表示dfs开始的起点!而是输入的第一个点!...(妈蛋...坑死人了...)
嗯...这样的话就是敲宽搜和深搜模板代码的节奏了:
因为dfs自己很不熟练,所以这里呢mark一下dfs的模板吧(虽然不算是模板,但是感觉dfs很多都是这样用的)
procedure dfs(x,d,num:longint);
var
i:longint;
begin
if (num=p) then//如果已经找到了所有的点那么就要回到起点了,尝试更新最短距离
begin
if d+w[x,1]<ans then ans:=d+w[x,1];
exit;//结束子程序
end;
for i:=1 to p do
if bo[i] then//如果没有访问过
begin
bo[i]:=false;//就访问它
dfs(i,d+w[x,i],num+1);//距离要增加,访问数目要增加
bo[i]:=true;//回溯
end;
end;
最后同样的...附上ccy大神的详细的注释!:
首先用宽搜记录下每个点到其他的点的距离(最短),这个最短可以用宽搜来实现,具体的实现方法是,从每一个“河蟹"开始往外宽搜,如果搜到了一个"河蟹",就直接标记最短距离.
因为是宽搜,但是标记完之后不能作为结束条件,因为可能有其他的河蟹到这个河蟹的最短距离没有被搜出来,所以用一个计数器k来记住搜到了几只河蟹。 求出最短距离之后就直接用深搜从第一个点开始遍历,直至遍历完整张图,不要忘记了还要回到起点(1);
直接深搜即可; 【程序】
const
dx:array[1..8] of integer=(-2,-2,2,2,-1,-1,1,1);
dy:array[1..8] of integer=(-1,1,-1,1,-2,2,-2,2);
var
map:array[0..25,0..25] of longint;
bo:array[0..20] of boolean;
w,mi:array[0..25,0..25] of longint;
dis:array[0..20,0..20] of longint;
d:array[0..15,1..2] of longint;
n,p,i,j,k,x,y,ans:longint; function min(k1,k2:longint):longint;
begin
if k1>k2 then exit(k2) else exit(k1);
end; procedure bfs(r,c,m:longint);
var
i,x1,y1,x2,y2,d2,head,tail,k:longint;
h:array[1..10000] of record
x,y,d:longint;
end; begin
dis[r,c]:=-1000;//一开始的起点赋值为一个很小的数,这样他就不会再跑回来了
head:=0;tail:=1;k:=0;
h[1].x:=r;h[1].y:=c;h[1].d:=0;//队列初始化
while head<tail do
begin
inc(head);
x1:=h[head].x;y1:=h[head].y;//取出队列中的第一个元素
for i:=1 to 8 do//往八个方向拓展节点
begin
x2:=x1+dx[i];y2:=y1+dy[i];d2:=h[head].d;
if (x2>0) and (x2<=n) and (y2>0) and (y2<=n) and (dis[x2,y2]>d2+1) then//如果这些点的坐标满足题意 且离起点//的步数小于目标点的最短距离 那么就可行
begin
if map[x2,y2]>0 then inc(k);//如果找到了一只河蟹那么就增加计数器
w[m,map[x2,y2]]:=d2+1;//更新最短距离
if k=p-1 then exit;//如果已经找到了所有的河蟹那么就结束
dis[x2,y2]:=d2+1;//否则就更新起点到这个点的最短距离
inc(tail);//入队
h[tail].x:=x2;h[tail].y:=y2;h[tail].d:=d2+1;
end;
end;
end;
end; procedure dfs(x,d,num:longint);
var
i:longint;
begin
if (num=p) then//如果已经找到了所有的点那么就要回到起点了,尝试更新最短距离
begin
if d+w[x,1]<ans then ans:=d+w[x,1];
exit;//结束子程序
end;
for i:=1 to p do
if bo[i] then//如果没有访问过
begin
bo[i]:=false;//就访问它
dfs(i,d+w[x,i],num+1);//距离要增加,访问数目要增加
bo[i]:=true;//回溯
end;
end; begin
readln(n,p);//读入棋盘大小和河蟹的个数
fillchar(map,sizeof(map),0);//一开始图上的所有点的标记都为0
if p=1 then begin writeln(0);halt;end;//如果只有一只河蟹那么就直接判0。
for i:=1 to p do//读入坐标 这个坐标在图上标记为i,用于区别普通棋格
begin
readln(d[i,1],d[i,2]);
map[d[i,1],d[i,2]]:=i;
end;
for i:=1 to p do
begin
fillchar(dis,sizeof(dis),$7f div 3);//和其他点的最短距离一开始赋值为很大的数
x:=d[i,1];y:=d[i,2];//从每一个点开始广搜
bfs(x,y,i);//开始!
end;
fillchar(bo,sizeof(bo),true);
bo[1]:=false;//从第一个点开始广搜
ans:=maxlongint;//这是最后的答案
dfs(1,0,1);
writeln(ans);//输出答案
end.
然后..晚安
希望这个星期可以整理到day6+吧...加油...
已9-9...没有时间了
Day3:T1数论+高精 T2搜索的更多相关文章
- NOIP 2012 T2 国王游戏 (贪心+高精)
思路: 呃呃网上那么多题解写得都不错-.. 就是高精 巨坑... 这里展出的是任氏高精(纯自己yy滴) //By SiriusRen #include <cstdio> #include ...
- BZOJ.1210.[HNOI2004]邮递员(插头DP Hash 高精)
BZOJ 洛谷 http://www.cnblogs.com/LadyLex/p/7326874.html 插头DP.\(m+1\)个插头的状态需要用三进制表示:\(0\)表示无插头,\(1\)表示是 ...
- 「NOIP模拟赛」数位和乘积(dp,高精)
统计方案数,要么组合数,要么递推(dp)了. 这是有模拟赛历史以来爆炸最狠的一次 T1写了正解,也想到开long long,但是开错了地方然后数组开大了结果100->0 T3看错题本来简单模拟又 ...
- vj1010:高精乘+细心模拟
这题的话思路挺简单的,主要是打一个高精乘,然后考虑一些细节的东西 码得挺少时间的,但是调错调了很久... 讲一下思路吧: 就是读入的时候,先把小数点去掉,mark一下小数点的位置 去掉小数点之后也就进 ...
- [P1005][NOIP2007] 矩阵取数游戏 (DP+高精)
我不会高精…… 也不会DP…… 这道题即考高精又考DP…… 我要死了 给一个不是高精的代码(当然不能满分) #include<cstdio> #include<iostream> ...
- 洛谷P4608 [FJOI2016]所有公共子序列问题 【序列自动机 + dp + 高精】
题目链接 洛谷P4608 题解 建个序列自动机后 第一问暴搜 第二问dp + 高精 设\(f[i][j]\)为两个序列自动机分别走到\(i\)和\(j\)节点的方案数,答案就是\(f[0][0]\) ...
- 继续写高精!noip2012国王游戏。。。
国王游戏 题目描述: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王 ...
- 高精地图技术专栏 | 基于空间连续性的异常3D点云修复技术
1.背景 1.1 高精资料采集 高精采集车是集成了测绘激光.高性能惯导.高分辨率相机等传感器为一体的移动测绘系统.高德高精团队经过多年深耕打造的采集车,具有精度高.速度快.数据产生周期短.自动化程度高 ...
- Linux 高精確的時序(sleep, usleep,nanosleep) from:http://blog.sina.com.cn/s/blog_533ab41c0100htae.html
Linux 高精確的時序(sleep, usleep,nanosleep) (2010-04-14 17:18:26) 转载▼ 标签: 杂谈 分类: linux 首先, 我会说不保证你在使用者模式 ( ...
随机推荐
- Asp.Net实现FORM认证的一些使用技巧
原文转发:http://www.cnblogs.com/Showshare/archive/2010/07/09/1772886.html 最近因为项目代码重构需要重新整理用户登录和权限控制的部分,现 ...
- Cocos2d-x实现Android的Toast特征
1.Toast Android的Toast是View视图,显示少量的信息.主要用于一些提示和帮助.本文实现了Toast最主要的操作能, 代码例如以下: //PacToast.h #include &q ...
- C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...
- Sqlserver2012 评估期已过解决问题
Sqlserver2012评估期已过问题解决 一.背景: 因为之前安装sqlserver2012忘记输入序列号,如今出现评估期已过的问题,前几天忙活半天,才解决,发现网 上叙述都非常凌乱,并且仅仅有 ...
- NHibernate构建一个ASP.NET MVC应用程序
NHibernate构建一个ASP.NET MVC应用程序 什么是Nhibernate? NHibernate是一个面向.NET环境的对象/关系数据库映射工具.对象/关系数据库映射(object/re ...
- [CLR via C#]5.2 引用类型和值类型
原文:[CLR via C#]5.2 引用类型和值类型 CLR支持两种类型:引用类型和值类型. 虽然FCL中大多数都是引用类型,但开发人员用的最多的还是值类型.引用类型总是在托管堆上分配的,C#的ne ...
- Cocos2d-x数据持久-变更数据
当数据变化,参与SQL报表insert.update和delete声明.这项3个月SQL语句可以带参数. 详细过程的数据,例如,下面的变化看出.(1) 采用sqlite3_open开放式数据库功能.( ...
- SSAS系列——【04】多维数据(物理体系结构)
原文:SSAS系列——[04]多维数据(物理体系结构) 1.本地多维数据集 本地多维数据集和本地挖掘模型允许在客户端工作站与网络的连接断开时对该工作站进行分析.在与本地多维数据集进行交互时,ADMOD ...
- SQL 无限级分类语句
原文:SQL 无限级分类语句 原表数据为: 此处用到了with关键字,在程序中也可以用递归实现,但觉得还是没有一条sql方便 with tb (ID,Name,ParentID,Sort) as( s ...
- Backbone入门
Backbone入门讲解 Backbone是一个实现了web前端mvc模式的js框架. 一种解决问题的通用方法,我们叫做模式. 设计模式:工厂模式,适配器模式,观察者模式等,推荐js设计模式这本书.设 ...