2017.1.13【初中部 GDKOI】模拟赛B组

今天比赛有点不在状态,所以成功地垫底了。

T1:比赛时怎么想都想不出来,知道正解后才发现如此简单。。。

我们知道,想删掉朝向向左的花,最优一定是从右往左删这些花,同理,想删掉朝向向右的花,最优一定是从左往右删这些花。然后我们可以计算一下先删左和先删右的值,最后选出最小。

比赛时想得太复杂了,下次要注意做题时不要急着想算法,要先想题目一些隐藏的性质。


T2:比赛时已经想对了,就差一个优化了。

用dfs从(1,1)开始找,优先选值小的数,如果路径合法就结束,否则继续往下搜。优化就是加一个标记数组,走过的地方就不要走了。


T3:这题的方法很巧妙。

我们先不要管最大能量,我们知道只要算出最终能剩多少个能源,就可以算出最大能量了(选最高的那几个)。

关键是怎样算出最终剩能源的个数,这时我们可以用栈。

我们知道,A操作不会损失能源,而B操作会损失一遍较小的能源。

我们把输入的字符串倒着搜一遍,然后:

1、每遇到一个“X”,就把它入栈

2、每遇到一个“A”,就把它下面两个位置的“X”的个数加起来,同时把它入栈,把它下面的两个位置删掉。

3、每遇到一个“B”,就选择他下面两个位置中“X”的个数多的一个,同时把它入栈,把它下面的两个位置删掉。

最终栈里只会剩下一个元素,而这个就是最终剩余能量的个数。

你可能感兴趣的:(【初中部,NOIP提高组,】模拟赛B)