经典的二维费用背包问题。
状态定义:f[i][j][k] 表示前 i 个技能,花费至多 j 的时间和至多 k 的体力,能够获得最大的成就感。
状态转移:
不选择第 i 个技能
f[i][j][k]=f[i−1][j][k]
小明打算在假期学习 n 种技能,每种技能需要花费一定的时间和体力,学会后能获得相应的成就感。小明共有 T 的时间和 H 的体力可供支配。请帮助小明选择一些技能进行学习,使得总时间不超过 T、总体力不超过 H,并且累计成就感最大。
数据规模:n 不超过 50,T 和 H 不超过 500,每个技能所需时间 ti 和体力 hi 不超过 30,成就感 ai 不超过 10^9。
第一行一个整数 n (1≤n≤50),表示技能的数量。 第二行两个整数 T 和 H (1≤T,H≤500),分别表示总时间和总体力上限。 接下来 n 行,每行三个整数 ti, hi, ai (1≤ti,hi≤30, 1≤ai≤109),表示学习该技能所需时间、体力以及获得的成就感。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.