1131. 【NOIP2009PJ】道路游戏

1131.【NOIP2009PJ】道路游戏(game.pas/cpp) 

·比较难的DP

·设fi,j,0表示当前第i时刻到达第j个工厂,在这里并不买机器人的最大金币数

·设fi,j,1表示当前第i时刻到达第j个工厂,在这里买一个机器人的最大金币数

·注意,题目要求每个时刻必须要有一个机器人,且走的时候是顺时针的走,Gi表示在第i个工厂买机器人所需要的金币

·试想推推fi,j,0

·根据上述每个时刻必须要有一个机器人,且当前时刻不买机器人,那么很明显只能通过上一个工厂到达这里,否则当前fi,j,0无值

·那么上一个工厂只可能是第i-1个时刻到达

·如果上一个工厂也不买机器人的话,那么只有可能通过再前面的买了机器人的工厂走到这,因为机器人的的步数不能超过p,则我们可以再设一状态辅助

·设Ti,j表示第i时刻到达第j个工厂,不买机器人时之前买了的机器人已经走过的步数,如述,Ti-1,j必须要小于p

·如果被fi-1,j-1,0更新,则Ti,j=ti-1,j+1

·如果被fi-1,j-1,1更新,则Ti,j=2(一个隐含条件p>1

·接下来讨论fi,j,1,很明显,当前如果买机器人的话,你前面再怎么瞎搞都与当前时刻无关,所以就把前面算过的所有数当中的最大值记录下来即可,Ti,j=1

·最后需注意,不一定全走完m个时间,取所有最大值即可,其次,当i=1的时候,很明显更新不了fi,j,0fi-1,j-1,0只有在i>2的时候才有效,且f的初值应设为无穷小


难度:****

你可能感兴趣的:(1131. 【NOIP2009PJ】道路游戏)