1 solutions

  • 0
    @ 2025-3-3 16:21:26

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    
    /*
      01背包
      f[i,j] = max(f[i-1,j],f[i-1,j-v[i]]+w[i])
      分组背包:三重循环 
      f[i,j] = max(f[i-1,j],f[i-1,j-v[i,k]]+w[i,k]) 
    */
    
    int f[110][110],v[110][110],w[110][110],s[110];
    int main() {
    	int n,m;
    	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 = 0;j <= m;j++){
    			f[i][j] = f[i-1][j];//本组不选的情况 
    			for(int k = 0;k < s[i];k++){
    				if(v[i][k] <= j){
    					f[i][j] = max(f[i][j],f[i-1][j-v[i][k]]+w[i][k]);
    				}
    			}
    		}
    	}
    	
    	cout<<f[n][m];
    	return 0;
    }
    
    
    • 1

    Information

    ID
    9948
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By