1 solutions
-
0
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