2016.1.24【初中部 NOIP 提高组 】模拟赛

来源:互联网 发布:巫师3画面优化设置 编辑:程序博客网 时间:2024/04/28 16:19

总结

拿到题目迷迷糊糊全部看完了,做了半天只做出第三第四题,第三题又忘了特判得0分。最后400分得70分被全体初二虐个遍。
很久没做过模拟赛了。看到第二题以前好像做过,兴冲冲地跳过看其他题,结果后来还忘了怎么优化这题。
题其实都不难,主要是感觉状态不行。对于一套完全有能力300+的比赛,状态是很重要的吧。打题的时候,想着身边一个个同学能力都慢慢超过我不少,最近打题又打得不太好,就越打越慢,心思都不在上面。
要端正个态度,切出题才重要,并不是比别人厉害多少就怎么好了。
题切的少了吧,打起来不大熟。语法看得少了吧,老是有奇怪编译错误。
最近学的不是很踏实,不知道是初三大背景的压迫呢,还是自己的放松呢。有时候我想会不会是要坐在一个很有冲劲的同学旁边,来使自己进步快点。我现在发现,自己鼓劲,自己发光才最重要。
抬头吧,相信爱你便能飞。


下面是题目分析与思考

T1 灌水

大意:给n个(农田)点,以及他们互相修灌溉道的代价、自己修水库的代价,求让所有农田都被灌溉的最小代价,灌溉道是有传递性的。 n<=300

分析:开始想了半天如何贪心,思考了很久关于水库的选址问题。思维一直卡在这里了,没法出去。
其实这道题就建多一个点,向所有的点连边,边权值为修水库代价,然后从该点最小生成树就完了···

T2 炮兵阵地

大意:给你一块n*m的地图,其中平原(P)可以放炮兵,山地(H)不行,一个炮兵会打中往上下左右延伸2格的地方,即这里写图片描述,求炮兵在不打到自己人最多放几个。
n<=100 m<=10

分析

状态压缩DP嘛,主要是要优化2的20次方的状态。
优化一:我们只要记录有用状态,在枚举状态的时候不用搜没有用的状态。
优化二:每次弄出一行新状态而不是1个一个弄,这样在一个约束状态下,我们就能得知那里可以放。从而不枚举没有用的新状态来尝试更新DP数组。
比赛的时候我担心不能过,这两个优化没用,就放弃了。也不够时间、不怎么会证明。事实上比赛遇到这种情况可以碰运气的,因为很有可能方向是对的,只是你暂时无法证明罢了。

T3 Islands and Bridges

 给定一些岛屿和一些连接岛屿的桥梁,大家都知道汉密尔顿路是访问每个岛屿一次的路线,在我们这个地图中,每个岛屿有个正整数的权值,表示这个岛屿的观赏价值。假设一共有N个岛屿,用Vi表示岛屿Ci的价值,汉密尔顿路C1C2….Cn的价值是以下三部分的总和:
  (1)所有岛屿的价值之和;
  (2)对于路径中相邻的两个岛屿CiCi+1,把两个岛屿的价值之积加到总价值中;
  (3)路径中连续三个岛屿CiCi+1Ci+2,如果Ci与Ci+2有桥直接相连,则把这三个岛屿价值之积加到总价值中。
  要求计算汉密尔顿路最大的价值以及方案数。

分析

显然每个点只能而且必须经过一次,所以状压DP咯,当然因为有条件2和3,我们需要额外记录最后两个岛屿是什么。注意对只有一个岛屿的特判,与所求方案数是什么的方案数。细看题,对于这种出题人懒得出点的单点多组数据的题目尤为重要。

T4 【Usaco 2010 NOV Gold】奶牛的图片

Farmer John希望给他的N(1<=N<=100,000)只奶牛拍照片,这样他就可以向他的朋友炫耀他的奶牛.这N只奶牛被标号为1..N.
在照相的那一天,奶牛们排成了一排.其中第i个位置上是标号为c_i(1<=c_i<=N)的奶牛.对于奶牛的站位,Farmer John有他自己的想法.
FJ是这么想的,标号为i(1<=i<=n-1)的奶牛只能站在标号为i+1的奶牛的左边,而标号为N的奶牛只能站在标号为1的奶牛的左边.当然,没有牛可以站在队列中最左边的奶牛的左边了.也就是说,最左边的奶牛编号是随意的.
这些奶牛都非常的饿,急切的希望吃到FJ承诺的在拍照后的大餐,所以FJ想尽快的拍照.奶牛们的方向感非常的不好,所以FJ每一分钟只可以选择相邻的两只奶牛然后让他们交换位置.FJ最小需要多少时间就能使奶牛站成一个可以接受的序列?
比方说一个有5只奶牛的例子,一开始序列是这样的:
左边 右边
3 5 4 2 1

第一分钟,FJ可以交换第二队奶牛(即5和4),交换后的队列:
3 4 5 2 1
第二分钟,FJ交换最右边的一对,序列变成这样:
3 4 5 1 2
这样,只用了2分钟,就是序列变为了一个FJ所希望的序列.

要回去睡觉了不写这题大意,理解起来可能有点困难,反正分成两块就对了。

分析

对于这种相邻的数两两交换达到目标状态的题目,我们应该联想到逆序对,因为每次交换都会减掉或增加一对。所以原序列逆序对的个数即为,原序列转到[1,2,3…n]的交换次数。
哎,我们发散地想出了上面一点,有没有用呢?思考一下他对快速求原序列转到[n,1,2,3…n-1]的交换次数有什么贡献。

我们可以发现[1,2,3…n] 转移到 [n,1,2,3…n-1]只是n这个数一直在动而已。设转移到[1,2,3…n] 次数为x[1],原序列转移到 [n,1,2,3…n-1]次数为x[2],position[n]为数字n原本的位置。
那么x[2]=x[1]-(n-position[n])+position[n]-1;(画个图想一想,为什么)
以此类推,所有的x都能在O(1)时间算出。
取个最小值就行了。
这道题可以看出的是,发散性思维很重要,对基础知识掌握熟练也很重要,灵活运用更重要。所以平时一定要多动脑,还要吃点脑铂金什么的^_^

明天继续努力!

0 0
原创粉丝点击