边界:
f
[
i
]
[
j
]
=
−
I
N
F
,
f
[
0
]
[
T
]
=
0
f[i][j]=-INF,f[0][T]=0
f[i][j]=−INF,f[0][T]=0
转移方程:转移时不需要判断背包容量是否足够,因为可以为负
f
[
i
]
[
j
+
T
]
=
m
a
x
(
f
[
i
]
[
j
+
T
]
,
m
a
x
(
f
[
i
−
1
]
[
j
+
T
]
,
f
[
i
−
1
]
[
j
−
c
[
i
]
+
T
]
+
w
[
i
]
)
)
f[i][j+T]=max(f[i][j+T],max(f[i-1][j+T] ,f[i-1][j-c[i]+T]+w[i]))
f[i][j+T]=max(f[i][j+T],max(f[i−1][j+T],f[i−1][j−c[i]+T]+w[i]))
计算答案:
j
从
0
到
m
,
如
果
f
[
n
]
[
j
+
T
]
>
=
0
,
a
n
s
=
m
a
x
(
a
n
s
,
j
+
f
[
n
]
[
j
]
)
j从0到m,如果f[n][j+T]>=0 ,ans=max(ans,j+f[n][j])
j从0到m,如果f[n][j+T]>=0,ans=max(ans,j+f[n][j])