西工大ACM校赛题解

   由于本人英语水平有限,所以此次ACM校赛7道题目均为中文题面。以下是简要题解,供大家赛后参考。题目均为原创,测试数据大部分随机生成,个别组为人工设置用于卡一些边界的处理。每道题目在本人写了标程测试后都分别找了华电的雷神,上海大学的邝斌,安徽大学的程文章以及西电的石国勋等人验过。在我的程序和他们的程序跑的结果一样的情况下,将所处理数据定为最终的测试数据。标准程序和现场测试数据都已发到西工大ACM群中,可自行下载。

 

                         武士

有一个m*n的矩阵,每个位置都有一个武力超强的武士,而你也已经山中修炼了30年。现在你要挑战这些武士。挑战的规则和顺序是这样的:第一个和最后一个你要挑战的分别是位于左上角和右上角的武士,而每挑战完一个你可以选择相邻的右边、上边或下边的武士继续挑战,但是挑战过的就不能再选择了。刚开始你的血值是0,每打完一个武士,你的血值的变化等于相应位置上的整数(正数代表增血,负数代表掉血)。当然,你不会因为血值小于0而死掉。为了到最后得到更大的血值,你该如何根据规则来选择挑战的武士呢?

 

输入:输入有多组测试数据(不超过100组)。每组数据的第一行输入两个正整数mnm<=100,n<=100)。接下来m行,每行n个整数,分别代表挑战相应位置武士你的血值的变化,每个整数都大于等于-100且小于等于100

输出:每组测试数据输出一行,输出一个整数,代表根据最优的打法,你打完右上角那个武士时能获得的最大的血值。

 

 

输入样例:

4
-1 0
-2 2
3 -90

2

1

 

输出样例:

18

4

 

解法

DP或者记忆化搜索。每个点会有两个状态。Dp[i][j][0]表示向右或向下走的最大值,Dp[i][j][1]表示向右或向上的最大值。根据题意得到的转移方程是:Dp[i][j][0]=num[i][j]+max(Dp[i+1][j][0],max(Dp[i][j+1][1],Dp[i][j+1][0]);

Dp[i][j][1]=num[i][j]+max(Dp[i+1][j][1],max(Dp[i][j+1][1],Dp[i][j+1][0]);

  

 

 

                      B蚂蚁的相遇

   有这么n只蚂蚁,它们生活在一维空间的国度,我们抽象其为x坐标轴。初始时第i只蚂蚁相对于原点的坐标位置为Ci

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值