弹簧高跷

题目描述

在草场上有一条直线,直线上有若干个目标点。每个目标点都有一个分值和一个坐标。现在你可以选择其中任意一个目标点开始跳,只能沿一个方向跳,并且必须跳到另一个目标点。且每次跳的距离都不能少于上一次的距离。请问你能得到的最大分值是多少?

输入

第一行一个整数N(1<=N<=1000).接下来从第二行到第N+1行,每一行包含两个整数x(i)和p(i),每个整数在区间[0,1000000]之间。

输出

输出格式:最大能获得的分值。

样例输入

6
5 6
1 1
10 5
7 6
4 8
8 10

样例输出

25

题解

设f[i][j]为 是从第j个点跳到第i个点的,跳到第i个点,得到的最大分值,则

f[i][j] = max (f[j][k])+ p[i](id[i] - id[j] >= id[j] - id[k])f[i][j]=max(f[j][k])+p[i](id[i]-id[j]>=id[j]-id[k])

(j在中间,k、i在两侧)

所以这个要先按坐标排序。

现在假设j不变,在合法的情况下,在j+1~n找一个i,再找出最小的k(记作t),找出最优的k,用smax记录其f[j][k]。设当i为ii时,k为kk,在t~kk中找到最优的f[j][k],smax=max(smax,f[j][k]),t=kk,f[ii][j]=smax+p[i]。

但需要注意的是,题目中说了开始可以选择任意方向跳,所以有两种情况,i在左侧,i在右侧。

i在右侧参考:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值