棋盘解题报告(noip2017普及组第三题)

合集下载

NOIP2017普及组初赛试题及详细解析

NOIP2017普及组初赛试题及详细解析
NOIP2017 普及组初赛试题及详细解析 一、单项选择题(共 20 题,每题 1.5 分,共计 30 分;每题有且仅有一个正确选项) 1.在 8 位二进制补码中,10101011 表示的数是十进制下的( )。 A. 43 B. -85 C. -43 D. -84 答案:B 解析:补码就是符号位不变,其他各位逐位求反再加 1,符号位 1 是负数 2.计算机存储数据的基本单位是( )。 A. bit B. Byte C. GB D. KB 答案:B 3.下列协议中与电子邮件无关的是( )。 A. POP3 B. SMTP C. WTO D. IMAP 答案:C 解析: POP3 是 Post Office Protocol 3 的简称,即邮局协议的第 3 个版本; MTP 的全称是 “Simple Mail Transfer Protocol”,即简单邮件传输协议; IMAP 全称是 Internet Mail Access Protocol,即交互式邮件存取协议,它是跟 POP3 类似邮件访问标准协议之一;WTO 世界贸 易组织(World Trade Organization) 4.分辨率为 800x600、16 位色的位图,存储图像信息所需的空间为( )。 A.937.5KB B. 4218.75KB C.4320KB D. 2880KB 答案:A 解析:800*600*16/8/1024=937.5KB 5.计算机应用的最早领域是( )。 A. 数值计算 B. 人工智能 C. 机器人 D. 过程控制 答案:A 6.下列不属于面向对象程序设计语言的是( )。 A. C B. C++ C. Java D. C# 答案 A 解析:c 语言是面向过程,c++则是面向对象

NOIP2017初赛普及组C++试题及答案

NOIP2017初赛普及组C++试题及答案

第二十三届全国青少年信息学奥林匹克联赛初赛

普及组C++语言试题

竞赛时间:2017年10月14日14:30~16:30

选手注意:

●试题纸共有7 页,答题纸共有2 页,满分100 分。请在答题纸上作答,写在试题纸上的一律无效。

●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。一、单项选择题(共20 题,每题 1.5 分,共计30 分;每题有且仅有一个正确选项)

1. 在8 位二进制补码中,10101011 表示的数是十进制下的()。

A. 43

B. -85

C. -43

D. -84

2. 计算机存储数据的基本单位是()。

A. bit

B. Byte

C. GB

D. KB

3.下列协议中与电子邮件无关的是()。

A. POP3

B. SMTP

C. WTO

D. IMAP

4. 分辨率为800x600、16 位色的位图,存储图像信息所需的空间为()。

A. 937.5KB

B. 4218.75KB

C. 4320KB

D. 2880KB

5. 计算机应用的最早领域是()。

A. 数值计算

B. 人工智能

C. 机器人

D. 过程控制

6.下列不属于面向对象程序设计语言的是()。

A. C

B. C++

C. Java

D. C#

7. NOI 的中文意思是()。

A. 中国信息学联赛

B. 全国青少年信息学奥林匹克竞赛

C. 中国青少年信息学奥林匹克竞赛

D. 中国计算机协会

8. 2017 年10 月1 日是星期日,1999 年10 月1 日是()。

A. 星期三

B. 星期日

C. 星期五

D. 星期二

9.甲、乙、丙三位同学选修课程,从4 门课程中,甲选修2 门,乙、丙各选修3门,则不同的选修方案共有()种。

noip2017普及组初赛试题+答案

noip2017普及组初赛试题+答案

第23 届全国青少年信息学奥林匹克联赛初赛

普及组C++ 语言试题

竞赛时间:2017 年10 月14 日14:30~16:30

选手注意:

1 、试题纸共有8 页,答题纸共有

2 页,满分100 分。请在答题纸上作答,写在试题纸上的一律无效。

2 、不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。

一、单项选择题(共20 题,每题1.5 分,共计30 分;每题有且仅有一个正确选项)

1.在8 位二进制补码中,10101011 表示的数是十进制下的( )。

A.43

B. -85

C. -43

D. -84 解析:补码就是符号位不变,其他各位逐位求反再加一结论:-85 答案B

2.计算机存储数据的基本单位是( )。

A.bit

B. Byte

C. GB

D. KB

3.下列协议中与电子邮件无关的是( )。

A. POP3

B. SMTP

C. WTO

D. IMAP

4.分辨率为800x600 、16 位色的位图,存储图像信息所需的空间为( )。

A.937.5KB

B. 4218.75KB

C.4320KB

D. 2880KB 解析:800*600*16/8=A

5.计算机应用的最早领域是( )。

A. 数值计算

B. 人工智能

C. 机器人

D. 过程控制

6.下列不属于面向对象程序设计语言的是( ) 。

A. C

B. C++

C. Java

D. C# 解析:新出的语言都是面向对象的,OOP 的,旧的不是,答案A

7.NOI 的中文意思是( ) 。

A. 中国信息学联赛

B.全国青少年信息学奥林匹克竞赛

C.中国青少年信息学奥林匹克竞赛

NOIP2017普及组初赛试题及详细解析

NOIP2017普及组初赛试题及详细解析

输入: 7 3 输出: ________ 答案:8
递归调用的时候要能够比较清晰的把下面的式子写出来 g(8,4,0)=g(8,3,0)+g(7,3,1)+g(6,3,2)=10+4+1=15 g(8,3,0)=g(8,2,0)+g(7,2,1)+g(6,2,2)=5+3+2=10 g(8,2,0)=g(8,1,0)+g(7,1,1)+g(6,1,2)+g(5,1,3)+g(4,1,4)=5 g(7,2,1)=g(6,1,1)+g(5,1,2)+g(4,1,3)=3 g(6,2,2)=g(4,1,2)+g(3,1,3)=2 g(7,3,1)=g(6,2,1)+g(5,2,2)=3+1=4 g(6,2,1)=g(5,1,1)+g(4,1,2)+g(3,1,3)=3 g(5,2,2)=g(3,1,2)=1 g(6,3,2)=g(4,2,2)=g(2,1,2)=1
19. 一家四口人,至少两个人生日属于同一月份的概率是()(假定每个人生日属于每个月份的概 率相同且不同人之间相互独立)。 A. 1/12 B. 1/144 C. 41/96 D. 3/4
答案 C 设 P(A)表示至少两个人生日在同一月份的概率,P(A’)表示四个人的生 日都不在同一月份的概率,则 P(A) = 1 - P(A’) P(A’) = A(12, 4) / 12 ^ 4 = 12 * 11 * 10 * 9 / (12 * 12 * 12 * 12)= 55 / 96 P(A) = 1 - P(A’) = 41 / 96

NOIP2017普及组复赛试题讲解(c++版本)

NOIP2017普及组复赛试题讲解(c++版本)
NOIP2017 普及组复赛题解
NOIP2017普及组C++
试题分析
2017. 07. 28
-2-
-3-
-4-
-5-
-6-
-7-
-8-
-9-
- 10 -
- 11 -
- 12 -
- 13 -
- 14 -
- 15 -
- 16 -
- 17 -
- 18 -
- 19 -
- 20 -
- 21 -
- 22 -
- 23 -
- 24 -
- 2来自百度文库 -

noip2017普及组复赛解题报告

noip2017普及组复赛解题报告

解法 2 最短路 Dijstra 数据太弱所以用了 dij,数据再强一点的话就需要用邻接表和 spfa 了 (毕竟普及组题难不到哪里去 写的看起来代码看起来很多, 但原理不难 把所有有颜色的点拿出来当做一张新图的结点 初始情况下这些点之间边的长度可以这样判断: 情况 1:如果两点在棋盘上位置相邻,那么同色距离为 0,异色距离为 1(对 应 tryStright 方法) 情况 2 :如果两点在棋盘上位置不相邻但有一个共同相邻的空白点可以做跳 板,使用魔法后同色距离为 2,异色距离为 3(对应 tryIndirect 方法) 然后对这张新图做最短路,求出点(1,1)到其他所有有颜色点的最短路 最后如果(m,m)有颜色, (1,1)到(m,m)之间的距离就是最短路 否则需要借助跳板(m,m-1)或(m-1,m)用魔法到(m,m).
T2 图书管理员
模拟 数据太弱所以直接暴力就能过 比较部分也可以用截取字符串的方式
#include <iostream> #include <math.h> using namespace std; int i,j,k,n,q,m,ans,a[1001]; int main() { cin>>n>>q; for (i=1;i<=n;i++) cin>>a[i]; for (i=1;i<=q;i++){ cin>>m>>k; ans = 10000001; for( j=1;j<=n;j++) if (a[ j]%int(pow(10,m)+0.5)==k && a[ j]<ans) ans=a[ j]; //举例 a[ j]=1123 m=2 k=23 就需要让 1123 取余 10^2 得到尾数 23 再与 k 比较

NOIP2017 解题报告 ZYH

NOIP2017  解题报告 ZYH

NOIP2017解题报告

一、成绩(score)

这是一道送分题。

题目明确规定A、B、C都是10的正数倍。所以我们可以将读入进来的a、b、c都先整除10,再分别将a*2,b*3,c*5,然后相加,就是最后的答案。且结果可以保存在longint类型中。

代码如下:

var

a,b,c,sum:longint;

begin

assign(input,'score.in');

reset(input);

assign(output,'score.out');

rewrite(output);

readln(a,b,c);

sum:=a div10*2+b div10*3+c div10*5;

writeln(sum);

close(input);

close(output);

end.

但倘若题目没有说明A、B、C都是10的正数倍,那么我们就将a*0.2,b*0.3,c*0.5,然后相加。但这一次结果需存在实型中。

二、图书管理员(librarian)

这是一道简单题。

其实吧,本套试卷我们要认真阅读数据规模,总能发现一些微妙的细节。

例如本题,所有的图书编码和需求码均不超过10,000,000完全可以用

longint存的(那不就很棒棒了~~)

对于读入的每一个需求码,我们都去循环一遍,先判断当前的这本书符不符合需求,但怎么判断呢?数据会告诉我们需求码的长度k,也就是说我们要判断当前书码的后k位是否等于需求码。哈哈哈,没错,只要用书码mod(10的k次方)即可。如果相等,那么进行判断取小(因为题目君说要最小的啦~~)。所以这里如果使用了快排从小到大,那么当你找到第一个满足要求的书码就是答案。当然不用也可以,时间复杂度为O(nq),1000,000不会炸。

NOIp2017普及组解题报告与参赛总结

NOIp2017普及组解题报告与参赛总结

29
ans := a[j];
30
if ans = '666666666' then writeln(-1) else writeln(ans);
31 end;
32 close(input);
33 close(output);
34 end.
NOIp2017 普及组解题报告&参赛总结
By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓 7 / 28
算法一(100pts)
因为题目较为简单,所以直接将正解吧。 先读入元素集合和 ������ 个询问,对于每个询问 ������������, ������������,因为已经给定位数,且位 数不多,直接枚举(暴力)求出 ������������������1≤������≤������ ������������ (������������ ������������������ 10������������ = ������������) 即可。 时间复杂度 ������(������������) 空间复杂度 ������(1)
第一题 成绩 (score.cpp/c/pas)
Time Limit: 1sec Memory Limit: 256MB
题意
给定 ������, ������, ������,求 ������ × 20% + ������ × 30% + ������ × 50% 的值。

棋盘解题报告(noip2017普及组第三题)

棋盘解题报告(noip2017普及组第三题)

棋盘解题报告(noip2017普及组第三题)上次写了Linux用vim进行C++编程的配置和操作入门后,今天再给棋盘写个解题报告试试。

题目描述

有一个m ×m的棋盘,棋盘上每一个格子可能是红色、黄色或没有任何颜色的。你现在要从棋盘的最左上角走到棋盘的最右下角。

任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的),你只能向上、下、左、右四个方向前进。当你从一个格子走向另一个格子时,如果两个格子的颜色相同,那你不需要花费金币;如果不同,则你需要花费1 个金币。另外,你可以花费2 个金币施展魔法让下一个无色格子暂时变为你指定的颜色。但这个魔法不能连续使用,而且这个魔法的持续时间很短,也就是说,如果你使用了这个魔法,走到了这个暂时有颜色的格子上,你就不能继续使用魔法;只有当你离开这个位置,走到一个本来就有颜色的格子上的时候,你才能继续使用这个魔法,而当你离开了这个位置(施展魔法使得变为有颜色的格子)时,这个格子恢复为无色。

现在你要从棋盘的最左上角,走到棋盘的最右下角,求花费的最少金币是多少?输入输出格式

输入格式:

数据的第一行包含两个正整数m,n,以一个空格分开,分别代表棋盘的大小,棋盘上有颜色的格子的数量。

接下来的n 行,每行三个正整数x,y,c,分别表示坐标为(x,y)的格子有颜色c。

其中c=1 代表黄色,c=0 代表红色。相邻两个数之间用一个空格隔开。棋盘左上角的坐标为(1, 1),右下角的坐标为(m, m)。

棋盘上其余的格子都是无色。保证棋盘的左上角,也就是(1,1)一定是有颜色的。

NOIP2017普及组初赛参考答案

NOIP2017普及组初赛参考答案

第二十三届全国青少年信息学奥林匹克联赛初赛

普及组参考答案

二、问题求解(共2题,每题5分,共计10分;每题全部答对得5分,没有部分分)

1.1009, 1008

2. 3

三、阅读程序写结果(共4题,每题8分,共计32分)

1.z

2.8

3.11

4.输出1:1 3 (3分)

输出2:2017 1 (5分)

四、完善程序(共计28分,以下各程序填空可能还有一些等价的写法,由各省赛区组织本省专家审定及上机验证,可以不上报CCF NOI科学委员会复核)

NOIP2017普及组初赛C++试题及答案

NOIP2017普及组初赛C++试题及答案
cout << res << endl; return 0;
输入∶1001101011001101101011110001
输出∶___
4.#include using namespace std;
int main() { int n, m;
cin >>n>>m; intx=1; inty=1;int dx=1;int dy=1;int cnt=0;
n = ch.length();
for(=0;i<200;i++) b[]=0;
for(=1;i<=n;i++){a]=ch[i-1-0;b[i]=b[i-1]+a[j];
下”
res = b[n];
。一t=0;
for(=n;i>0;i-){if (a[] =-0)
t++t;
if (b[i-1]+t<res) res=b[i-1]+t;

(1bound+ubound)div 2+1
(1bound+ubound)/2+1
(couinntc∶(c=coouunntt,+lleenn[【i]i 】d idvi vm imdid) 或
count-count+len【i】/mid 或
count+=len[i]/mid
NOIP2017普及组初赛试题
一、单项选择题(共 20 题,每题 1.5 分,共计 30分;每题有且仅有一个

NOIP2017普及组初赛试题_完善程序

NOIP2017普及组初赛试题_完善程序

第 3 页 共 3 页
/* 1.正确答案: 2.正确答案: 3.正确答案: 4.正确答案: 5.正确答案: */ 1 p>0 / p!=0 / p result * x % m x*x%m result
第 1 页 共 3 页
/* NOIP 2017 普及组初赛试题_完善程序 02: (切割绳子) 有 n 条绳子,每条绳子的长度已知且均为正整数。 绳子可以以任意正整数长度切割,但不可以连接。 现在要从这些绳子中切割出 m 条长度相同的绳段,求绳段的最大长度是多少。 (第一、二空 2.5 分,其余 3 分) 输入:第一行是一个不超过 100 的正整数 n, 第二行是 n 个不超过 10^{6}10 6 的正整数,表示每条绳子的长度,第三行是一个不超过 10^{8}10 8 的正整数 m。 输出:绳段的最大长度,若无法切割,输出 Failed。 */ #include using namespace std; int n, m, i, lbound, ubound, mid, count; int len[100]; // 绳子长度 int main() { cin >> n; count = 0; for (i = 0; i < n; i++) { cin >> len[i]; ①; } cin >> m; if (②) { cout << "Failed" << endl; return 0; } lbound = 1; ubound = 1000000; while (③) { mid = ④; count = 0; for (i = 0; i < n; i++) ⑤; if (count < m) ubound = mid - 1; else lbound = mid; }

NOIP2017普及组初赛试题及答案

NOIP2017普及组初赛试题及答案

.

普及组初赛试题及答案 NOIP2017文字标黑部分为试题答案。一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项)

1.在8位二进制补码中,10101011表示的数是十进制下的( )。

A. 43

B. -85

C. -43

D. -84

2.计算机存储数据的基本单位是( )。

A. bit

B. Byte

C. GB

D. KB

3.下列协议中与电子邮件无关的是( )。

A. POP3

B. SMTP

C. WTO

D. IMAP

4.分辨率为800x600、16位色的位图,存储图像信息所需的空间为( )。

A.937.5KB

B. 4218.75KB

C.4320KB

D. 2880KB

5.计算机应用的最早领域是( )。

A.数值计算

B.人工智能

C.机器人

D.过程控制

6.下列不属于面向对象程序设计语言的是( )。

A. C

B. C++

C. Java

D. C#

7.NOI的中文意思是( )。

A.中国信息学联赛

13

/ 1

.

B.全国青少年信息学奥林匹克竞赛

C.中国青少年信息学奥林匹克竞赛

D.中国计算机协会

8. 2017年10月1日是星期日,1999年10月1日是( )。

A.星期三

B.星期日

C.星期五

D.星期二

9.甲、乙、丙三位同学选修课程,从4门课程中,甲选修2门,乙、丙各选修3门,则不同的选修方案共有( )种。

A. 36

B. 48

C. 96

D. 192

10.设G是有n个结点、m条边(n ≤m)的连通图,必须删去G的( )条边,才能使得G变成一棵树。

A.m–n+1

B. m-n

C. m+n+1

D.n–m+1

NOIP-2017全国青少年信息学奥林匹克联赛提高组初赛试题标准答案

NOIP-2017全国青少年信息学奥林匹克联赛提高组初赛试题标准答案

NOIP 2017全国青少年信息学奥林匹克联赛提高组初赛试卷答案

一、单项选择题(共 15 题,每题 1.5 分,共计 22.5 分;每题有且仅有一个正确选项)

1. 从( )年开始,NOIP 竞赛将不再支持 Pascal 语言。

A. 2020

B. 2021

C. 2022

D. 2023

2.在 8 位二进制补码中,10101011 表示的数是十进制下的( )。

A. 43

B. -85

C. -43

D.-84

3.分辨率为 1600x900、16 位色的位图,存储图像信息所需的空间为( )。

A. 2812.5KB

B. 4218.75KB

C. 4320KB

D. 2880KB

4. 2017年10月1日是星期日,1949年10月1日是( )。

A. 星期三

B. 星期日

C. 星期六

D. 星期二

5. 设 G 是有 n 个结点、m 条边(n ≤m)的连通图,必须删去 G 的( )条边,才能使得 G 变成一棵树。

A.m–n+1

B. m-n

C. m+n+1

D.n–m+1

6. 若某算法的计算时间表示为递推关系式:

T(N)=2T(N/2)+NlogN

T(1)=1

则该算法的时间复杂度为( )。

A.O(N)

B.O(NlogN)

C.O(N log2N)

D.O(N2)

7. 表达式a * (b + c) * d的后缀形式是()。

A. abcd*+*

B. abc+*d*

C. a*bc+*d

D. b+c*a*d

8. 由四个不同的点构成的简单无向连通图的个数是( )。

A. 32

B. 35

C. 38

D. 41

9. 将7个名额分给4个不同的班级,允许有的班级没有名额,有( )种不同的分配方案。

noip2017普及组初赛试题+答案

noip2017普及组初赛试题+答案

第23届全国青少年信息学奥林匹克联赛初赛

普及组C++语言试题

竞赛时间:2017年10 月14 日14:30~16:30

选手注意:

1、试题纸共有8 页,答题纸共有2 页,满分100 分。请在答题纸上作答,写在试题纸上的一律无效。

2、不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。

一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项)

1.在 8 位二进制补码中,10101011 表示的数是十进制下的( )。

A. 43

B. -85

C. -43

D. -84

解析:补码就是符号位不变,其他各位逐位求反再加一

结论:-85 答案B

2.计算机存储数据的基本单位是( )。

A. bit

B. Byte

C. GB

D. KB

3.下列协议中与电子邮件无关的是( )。

A. POP3

B. SMTP

C. WTO

D. IMAP

4.分辨率为 800x600、16 位色的位图,存储图像信息所需的空间为( )。

A.937.5KB

B. 4218.75KB

C.4320KB

D. 2880KB

解析:800*600*16/8=A

5.计算机应用的最早领域是( )。

A. 数值计算

B. 人工智能

C. 机器人

D. 过程控制

6.下列不属于面向对象程序设计语言的是( )。

A. C

B. C++

C. Java

D. C#

解析:新出的语言都是面向对象的,OOP的,旧的不是,答案A

7.NOI 的中文意思是( )。

A. 中国信息学联赛

B. 全国青少年信息学奥林匹克竞赛

C. 中国青少年信息学奥林匹克竞赛

D. 中国计算机协会

NOIP2017初赛提高组参考答案

NOIP2017初赛提高组参考答案

第二十三届全国青少年信息学奥林匹克联赛初赛

提高组参考答案

三、问题求解(共2题,每题5分,共计10分)

1. 3

2. 4 (2分)

9 (3分)

四、阅读程序写结果(共4题,每题8分,共计32分)

1.15

2.17 24 1 8 15

3.8

4.输出1:1 3(2分)输出2:2017 1(3分)输出3:1 321(3分)

五、完善程序(共计28分,以下各程序填空可能还有一些等价的写法,由各省赛区组织本省专家审定及上机验证,可以不上报CCF NOI科学委员会复核)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

棋盘解题报告(noip2017普及组第三题)上次写了Linux用vim进行C++编程的配置和操作入门后,今天再给棋盘写个解题报告试试。

题目描述

有一个m ×m的棋盘,棋盘上每一个格子可能是红色、黄色或没有任何颜色的。你现在要从棋盘的最左上角走到棋盘的最右下角。

任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的),你只能向上、下、左、右四个方向前进。当你从一个格子走向另一个格子时,如果两个格子的颜色相同,那你不需要花费金币;如果不同,则你需要花费1 个金币。另外,你可以花费2 个金币施展魔法让下一个无色格子暂时变为你指定的颜色。但这个魔法不能连续使用,而且这个魔法的持续时间很短,也就是说,如果你使用了这个魔法,走到了这个暂时有颜色的格子上,你就不能继续使用魔法;只有当你离开这个位置,走到一个本来就有颜色的格子上的时候,你才能继续使用这个魔法,而当你离开了这个位置(施展魔法使得变为有颜色的格子)时,这个格子恢复为无色。

现在你要从棋盘的最左上角,走到棋盘的最右下角,求花费的最少金币是多少?输入输出格式

输入格式:

数据的第一行包含两个正整数m,n,以一个空格分开,分别代表棋盘的大小,棋盘上有颜色的格子的数量。

接下来的n 行,每行三个正整数x,y,c,分别表示坐标为(x,y)的格子有颜色c。

其中c=1 代表黄色,c=0 代表红色。相邻两个数之间用一个空格隔开。棋盘左上角的坐标为(1, 1),右下角的坐标为(m, m)。

棋盘上其余的格子都是无色。保证棋盘的左上角,也就是(1,1)一定是有颜色的。

输出格式:

输出一行,一个整数,表示花费的金币的最小值,如果无法到达,输出-1。输入输出样例

输入样例#1:

5 7

1 1 0

1 2 0

2 2 1

3 3 1

3 4 0

4 4 1

5 5 0

输出样例#1:

8

输入样例#2:

5 5

1 1 0

1 2 0

2 2 1

3 3 1

5 5 0

输出样例#2:

-1

说明

输入输出样例1 说明

从(1,1)开始,走到(1,2)不花费金币

从(1,2)向下走到(2,2)花费1 枚金币

从(2,2)施展魔法,将(2,3)变为黄色,花费2 枚金币从(2,2)走到(2,3)不花费金币

从(2,3)走到(3,3)不花费金币

从(3,3)走到(3,4)花费1 枚金币

从(3,4)走到(4,4)花费1 枚金币

从(4,4)施展魔法,将(4,5)变为黄色,花费2 枚金币,

从(4,4)走到(4,5)不花费金币

从(4,5)走到(5,5)花费1 枚金币

共花费8 枚金币。

输入输出样例2 说明

从(1,1)走到(1,2),不花费金币

从(1,2)走到(2,2),花费1 金币

施展魔法将(2,3)变为黄色,并从(2,2)走到(2,3)花费2 金币从(2,3)走到(3,3)不花费金币

从(3,3)只能施展魔法到达(3,2),(2,3),(3,4),(4,3)

而从以上四点均无法到达(5,5),故无法到达终点,输出-1

数据规模与约定

对于30%的数据,1 ≤m ≤5,1 ≤n ≤10。

对于60%的数据,1 ≤m ≤20,1 ≤n ≤200。

对于100%的数据,1 ≤m ≤100,1 ≤n ≤1,000。

解题报告

这道题目是2017年普及组第三题,实质上是求矩阵中一个点到另一个点的最短路径,对于这类型的题目,通常可以用搜索的方法来完成,深度优先和广度优先都行,广度优先需要使用队列,稍微复杂一点,我这里就用深搜来完成。

1、输入数据,构造棋盘,总共三种颜色,0表示红色,1表示黄色,-1表示无色;

2、从(1,1)点开始,往上下左右四个方向去搜索,这里和普通的只能往右和左搜索的题目有点不同,在普通的搜索里面,到达了一个点就设一个标志变量,然后下次就不再搜索这个节点,但是这里不能这么简单的处理,因为每个节点可以往上下左右四个方向搜索,如果不设标志则会形成死循环,出不来,设个标志则有可能从不同的路径走到这个点的花费可能不相同,第一次的花费不一定是最低的。那么我们就把进到这个节点的花费记录下来,下次进入这个节点时候,比较一下花费,如果相同或者大于上次花费,就不用搜索这个节点,否则就继续搜索他,我们把这种方法叫做记忆化搜索。

3、对于魔法问题,我们采用一点贪心策略,碰到一个无色格子,就让他变得和当前格子颜色一样,再到深搜递归函数里面加上一个参数,来表示魔法状态,如果上次已经使用了魔法,而当前格子是无色,也需要使用魔法,因为不能两次使用魔法,就直接返回。

4、当走到了右下角(m,m)点,说明已经找到了一条路径,把花费最小那条路径记录下来就OK了。

这道题目还是比较简单的,具体看代码:

#include

#include

#include

using namespace std;

int a[102][102],v[102][102],n,m,ans=999999;

int dx[]={0,1,0,-1},dy[]={1,0,-1,0};//按右下左上搜索

//搜索单元格(x,y),从(1,1)到上一单元已花费val

//上个单元颜色为c,上单元是否使用魔法mo

void dfs(int x, int y, int val, int c, bool mo)

{

if(a[x][y] == -1 && mo)//不能两次魔法

return;

if(x==m&&y==m)

{

相关文档
最新文档