关于10月16日模拟赛的心得与感悟

终于写到今天了...

 

第一题:纯水题,送分.模拟即可

 

第二题:最短路径. 大概题意是给出两个点的编号和n个点的坐标.要求每个点经过一次,0点允许经过两次.其中有三个限制条件:

1.从A走到B时,只能由横坐标小的点走到大的点.
2.由B回到A时,只能由横坐标大的点走到小的点.
3.有两个特殊点b1和b2,b1在0到n-1的路上,b2在n-1到0的路上.

可以运用动规的思想,定义dp[i][j].表示了第一条线路最前端为i , 第二条线路最前端为j 的最小路径长度.

每次更新时,取出 k = max( i , j ) + 1.而后更新下一次状态

dp[i][k] = min ( dp[i][k] , dp[i][j] + dis( j , k ) )

dp[k][j] = min ( dp[i][k] , dp[i][j] + dis( i , k ) )

其中必须走过的点和终点要特判,当走到只能单向通行的点的时候只能从其中一种状态转移.当走到终点时,由于k = max( j , j ) + 1,所以不会更新dp[n-1][n-1],而是会更新到下一层dp[n-1][n] 和dp[n][n-1].

 

第三题:停车的问题,每次要使停的车放在与其他车距离最小值最大.可以用Treap或线段树写出.

 

posted @ 2015-10-16 22:07  Mr_Tom  阅读(103)  评论(0编辑  收藏  举报