总结

来源:互联网 发布:linux虚拟机挂载光盘 编辑:程序博客网 时间:2024/04/24 01:17

题目描述

        大家都说要劳逸结合,Ayumi, Mitsuhiko, Genta画完方格就出去运动啦!
        他们来到了一片空地,画了N个连续的方格,每个方格上随机填上了一个数字,大家从第一个格子开始,每次可以向后跳不超过当前格子上的数的步数,大家开始就此比赛,看谁跳到最后一个格子的步数最少。
        作为队长的Genta显然是想获得胜利的,所以他打电话给Conan求助,可是Conan在玩游戏,所以就向你求助了。

输入

从文件 jump.in 中读入数据。
输入第一行包含一个整数N,表示画的格子的个数。
第二行包含N整数,表示每个格子上的数 。

输出

输出到文件 jump.out 中。
输出一行,表示跳的最少步数。

样例输入

52 3 1 1 1

样例输出

2

数据范围限制

题目描述

此时,Conan却在一旁玩着2048。
这是一个4*4的矩阵,初始全为0。每次一个没有数字的格子中会随机出现一个2或4,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,相同数字的方块在靠拢、相撞时会相加。
Conan想看看今天自己运气咋样,于是就闭着眼睛,在屏幕上随便滑来滑去。所以这个模拟的任务就交给你了。过了一会,他然后睁开眼睛,如果游戏没有结束(滑动后如果没有空格子,则游戏结束),请输出矩阵(格式参见样例),否则输出“Game over!”(不包含引号)

输入

从文件 game.in 中读入数据。
输入第一行包含一个整数N,表示Conan滑了几下。
接下来N 行,x, y, v, f表示第x行与第y列出现数字为v后,Conan滑的方向为ff为字符,U, D, L, R分别表示向上下左右滑)。
行从上往下1-4标号,列从左往右1-4标号
数据保证在游戏未结束时,只会在空白区域出现数字。

输出

输出到文件 game.out 中。
输出按题目描述。

样例输入

81 3 4 L2 3 2 U2 4 2 R4 1 2 L3 4 2 L3 2 2 D1 3 4 R1 3 2 U

样例输出

0 0 2 80 0 0 20 0 0 80 0 0 0

数据范围限制

【数据规模与约定】
对于100%的数据满足N<=1000 。

题目描述

“Ran,今天我要在Hakase家打游戏,不回来了。”
“Ran,Hakase新发明了游戏,我今天住博士家。”
“Ran,Conan今天要在我家通宵打游戏。”
终于有一天,电脑被打坏了……2333
所以Conan要前往专卖店买新的,正好专卖店正在促销,一共有三种礼包:
豪华礼包:一个 U盘、一个鼠标和一个机械键盘。
幸运礼包:一个 U盘、两个鼠标。
普通礼包:两个 U盘、一个鼠标。
卖店内准备了 a 个 U盘、b 个鼠标和 c 个机械键盘。为了给顾客带来足够多的惊喜,店长希望相邻两位领礼包的顾客拿到的礼包类型都是不同的。店长想知道这些奖品最多可以发出多少份礼包。可是店长毕竟没有Conan聪明,所以请教Conan,可是Conan要急着回去打游戏,所以就交给你啦。

输入

从文件 store.in 中读入数据。
输入第一行包含一个正整数 T。
接下来T行每行包含3个正整数a, b, c,依次表示U盘、鼠标和机械键盘各有多少个。

输出

输出到文件 store.out 中。
输出T行,每行一个整数,表示最多能发出多少份礼包。

样例输入

24 4 01 1 1

样例输出

21

数据范围限制

题目描述

    小C终于被小X感动了,于是决定与他看电影,然而小X距离电影院非常远,现在假设每条道路需要花费小X的时间为1,由于有数以万计的好朋友沿路祝贺,导致小X在通过某些路不得不耗费1的时间来和他们聊天,尽管他希望尽早见到小C,所以他希望找到一条最快时间到达电影院的路。
   一开始小X在1号点,共有N个点,M条路,电影院为T号点。

输入

   第一行3个正整数,分别为n,m,t
   以下m行,每行3个数,表示连接的编号以及权值
   (注意,可能会有重边)

输出

   一行一个数,表示1到t的最短路

样例输入

10 12 63 9 26 9 26 2 13 1 11 9 22 8 27 10 17 2 110 0 18 1 11 5 23 7 2

样例输出

4

数据范围限制

数据范围:
  30%:n<=10 m<=20
  60%:  n<=1000  m<=20000

  100%: n<=5000000  m<=10000000




2016.8.18
考试思路:
T1
动态规划。这题其实比较简单,可以用一个一维数组,然后f[i]表示到第i个需要的最少布数,初始化f数组里把第一个格子可以到达的地方布数
赋为1,然后循环i从2到n,j从1到i-1,两重循环里面,判断a[j]>=i-j,表示第j个格子显示的距离是否够走到i,如果满足则执行状态转移方程,
状态转移方程为f[i]:=min(f[i],f[j]+1),最后输出f[n],就可以了。
T2
就是一道模拟题,只需找出数字合并和变化的规律和方法,然后分开四种情况就可以了,大致思路为:如果是往上或下移动的话,就先枚举列,
然后就像选择排序一样枚举行,注意是从目标方向那边枚举行,看看有没有一样的,如果有,则按照规律变化就可以了,其实就是前面那个乘2,
后面那个变为零,可是如果找到后面有一个不为0且又不等于前面那个,那就break,然后在合并结束后,在枚举列的循环里也像合并那样而左右
移动则是先枚举行,再两个枚举列的循环,然后同理去做,就可以了。
T3
比赛时没想到解决方法,于是弃了,打了个表,可是没分。
T4
这题就是个求最短路的问题,可是如果用弗洛伊德算法会空间超限,于是就应该用SPFA算法,可是我比赛时存每一条边的长度时也用了二维数组,
所以只拿到70分。


正确思路:
T1
同上。
T2
大概的思路同上,但是比赛时没考虑到全部都没空格,但是a[i,j]的上下左右是可能会等于它自己的,而这样也还没有Game over,还有一种情况,
就是就算最后一步划过后Game over了,但是这不算,这是算下一步没得再继续,也就是算下一步的Game over,所以我们要判断现在的步数要
小于n才去判断Game over了没。
T3
这题大致是道贪心题目,可以让其它的礼包相互结合,然后先考虑让a和b接近,判断a大还是b大,如果是a大就是第一和第三种礼包结合,b大的话,
就是第一种和第二种礼包结合,看最多能发出多少个,然后再考虑让c缩小,一个第二种,一个第三种,两个第一种礼包组合,接着考虑一个第二种,
一个第三种礼包结合,最后可能就会出现满足原本那三种礼包的情况,然后判断一下,输出就可以了。
T4
这道题就是用SPFA算法,然后记录每一个点的每一条边的上一条,和下一条,就可以省去二位数组,然后利用SPFA求最短路,输出s[t],就可以了。


今天考得挺不错的,100+40+0+70,第八名,而且第一题用自己想出来的动态规划做对了,信心大增,然后第二题和第四题比赛时没有给程序优化,
少得了一点分,也是有点可惜,但是这都没有关系,以后继续加油!!!
1 1