题面描述
数字三角形就不给题面了
T1
完全背包问题,相当于对n种物品给无限个价值为cic_ici的物品,它的体积为aia_iai,在不超过背包容量上限bbb的情况下,求能获得的最大价值,xix_ixi相当于能获得这个物品的个数。
设 f[i][j]f[i][j]f[i][j]代表前iii 个物品,容量不超 jjj能获得的最大价值,对每个整数枚举xix_ixi
f[i][j]=max{f[i−1][j]j<min(ai,b)f[i][j−ai]+ciai≤j≤bf[i][j] = max\begin{cases}
f[i-1][j]&j<min(a_i,b)\\
f[i][j-a_i]+c_i&a_i \leq j \leq b
\end{cases}f[i][j]=max{f[i−1][j]f[i][j−ai]+cij<min(ai,b)ai≤j≤b
满足j−ai⋅xi≥0j-a_i\cdot x_i \geq 0j−ai⋅xi≥0
状态共有bnbnbn个,转移时间O(1)O(1)O(1),总时间复杂度O(bn)O(bn)O(bn)
T2
数字三角形问题,不说了(
forforfor i=1i=1i=1 tototo nnn dododo
forforfor j=1j=1j=1 tototo iii dododo
ififif j>1j>1j>1 thenthenthen
f[i][j]←max(f[i−1][j−1],f[i−1][j])+value[i][j]f[i][j] \leftarrow max(f[i-1][j-1],f[i-1][j])+value[i][j]f[i][j]←max(f[i−1][j−1],f[i−1][j])+value[i][j]
elseelseelse
f[i][j]←f[i−1][j]+value[i][j]f[i][j] \leftarrow f[i-1][j]+value[i][j]f[i][j]←f[i−1][j]+value[i][j]
endifendifendif
endforendforendfor
endforendforendfor
answer←maxanswer \leftarrow maxanswer←max f[n][i]f[n][i]f[n][i]
状态数O(n2)O(n^2)O(n2),转移复杂度O(1)O(1)O(1),总时间复杂度O(n2)O(n^2)O(n2)
T3
游艇出租问题
f[i]f[i]f[i]代表当前停靠在iii处的最小租金
做法是枚举一个上一个停靠的位置jjj,然后取minminmin
forforfor i=1i=1i=1 tototo nnn dododo
f[i]←Inff[i] \leftarrow Inff[i]←Inf
endforendforendfor
f[1]←0f[1] \leftarrow 0f[1]←0
forforfor i=2i=2i=2 tototo nnn dododo
forforfor j=1j=1j=1 tototo i−1i-1i−1 dododo
f[i]←min(f[i],f[j]+rent[j][i])f[i] \leftarrow min(f[i],f[j]+rent[j][i])f[i]←min(f[i],f[j]+rent[j][i])
endforendforendfor
endforendforendfor
answer←f[n]answer \leftarrow f[n]answer←f[n]
状态数O(n)O(n)O(n),转移复杂度O(n)O(n)O(n),总时间复杂度O(n2)O(n^2)O(n2)