1. 程式人生 > >3771 彈簧高蹺

3771 彈簧高蹺

設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在右側參考: