그룹 배낭 원칙

그룹 백팩

여러 배낭과 유사하게 각 항목에 대해 몇 개의 항목을 선택하여 각 항목 그룹에 대해 하나를 선택하십시오.

状态 转移 方程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 [ i1 ] [ j ] ,f [ i1 ] [ jv [ 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]);
			}
		}
	}

추천

출처blog.csdn.net/zzq0523/article/details/113099674