题目传送门
解题思路:
01背包.
AC代码:
#include<iostream>
#include<cstdio>
#include<vector> using namespace std; int n,sum[],id,_min = ;
vector<int> a[];
bool f[][]; int main() {
scanf("%d",&n);
for(int i = ;i <= n; i++) {
while(true) {
int u;
scanf("%d",&u);
if(u == -) break;
a[i].push_back(u);
sum[i] += u;
}
if(_min > sum[i]) {
_min = sum[i];
id = i;
}
f[i][] = ;
}
for(int i = ;i <= n; i++)
for(int j = ;j < a[i].size(); j++)
for(int k = sum[i];k >= a[i][j]; k--)
f[i][k] = f[i][k] | f[i][k - a[i][j]];
_min++;
while(_min--) {
bool flag = ;
for(int j = ;j <= n; j++)
if(!f[j][_min])
flag = ;
if(flag) {
printf("%d",_min);
return ;
}
}
printf("");
return ;
}