그룹 백팩
여러 배낭과 유사하게 각 항목에 대해 몇 개의 항목을 선택하여 각 항목 그룹에 대해 하나를 선택하십시오.
状态 转移 方程f [i] [j] = M ax (f [i − 1] [j], f [i − 1] [j − v [i] [k]]] + w [i] [k]) f [i] [j] = 최대 (f [i-1] [j], f [i-1] [jv [i] [k]] + w [i] [k])f [ i ] [ j ]=M a x ( f [ i−1 ] [ j ] ,f [ i−1 ] [ j−v [ i ] [ k ] ]+w [ i ] [ k ] )
따라서 한 차원으로 최적화 할 때 jj 를 큰 것에서 작은 것까지 열거해야합니다.제이
int n, m;
int f[N];
int v[N][N], w[N][N], s[N];
int main() {
cin >> n >> m;
for (int i = 1;i <= n;++i) {
cin >> s[i];
for (int j = 0;j < s[i];++j) {
cin >> v[i][j] >> w[i][j];
}
}
for (int i = 1;i <= n;++i) {
for (int j = m;j >= 0;--j) {
for (int k = 0;k < s[i];++k) {
if (v[i][k] <= j)f[j] = max(f[j], f[j - v[i][k]] + w[i][k]);
}
}
}