首先今天这场比赛出了三个题,感谢一下出题的小哥哥给我们留了几道签到题,
前两个多小时出了三道题,后面全程划水,非常难受。
A.run
题目大意
白云在健身,每秒可以走1米或跑k米,并且不能连续两秒都在跑。 当它的移动距离在[L,R]之间时,可以选择结束锻炼。 问有多少种方案结束。
做法 DP? f[i][0/1]表示已经跑了i米,最后一步是跑还是走的方案数。 f[i][1]=f[i-k][0],f[i][0]=f[i-1][0]+f[i-1][1] 答案即为f[i][0]+f[i][1]的累加和。
D money
题目大意
你要按照顺序依次经过n个商店,每到达一个商店你可以购买一件商品,也可以出售你手中的商品。 同一时刻你手上最多拿一件商品。在第i个商店购买和出售的代价都是a[i]。 问你经过完n个商店后的最大收益。 同时,在最大化收益的前提下,求最小的交易次数。 D money 做法 f[i][0/1]表示已经访问完了i个商店,你手中是否有商品,此时的最大收益。 g[i][0/1]表示当f[i][j]取最大值时最少的交易次数。 DP 贪心 首先,如果a[i]=a[i+1],则可以删掉第i+1个商店。因为任何在第i+1个商店进行的交易都可以转为在第i个商店 进行,且收益不变。之后,如果a[i]a[i+1],则离开 第i个商店时一定要空着手。这样,第一问的答案就 max((a[i+1]-a[i]),0),第二问的答案就为长度>1的 极大递增连续段的数量。
I car
题目大意
你要在一个n*n的矩形的边界上方若干辆车,所有车从同一 时刻出发,以同样的速度,从某一列的一侧开到另一侧或者 从某一行的一侧开到另一侧。问最多放多少量车使得存在一 种方式,这些车在行驶的过程中互不相撞。 (车可以视为质点) 同时还会有若干个格子被损坏车辆不能开进被损坏的格子。
先考虑所有格子全部完好的情况。 通过归纳总计出来的答案就是2n-(n mod 2)。
如何证明? 首先,一行一列最多只能放一辆车,同时如果n为奇数,则第(n+1)/2行和第(n+1)/2列不能都放车,所以刚刚 那个值是答案的上界。 同时我们也可以很容易地构造一组满足这个解的方案,得证。 有格子损坏时的情况也不难处理,就把那些行列去掉就好了。