题意:给你n个城堡的积木长度,要求这n个城堡的高度相等的同时,使得城堡高度最高。
解法:求出每个城堡可能的所有高度,记录最低城堡的高度,然后依次往下枚举所有城堡都可能满足的高度即可。
#include <stdio.h>
#include <string.h>
#define N 10005
bool mk[105][N];
int main()
{
int t, n, l, sum, ans;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
ans = N;
memset(mk, 0, sizeof(mk));
for(int i = 0; i < n; i++)
{
mk[i][0] = 1;
sum = 0;
while(scanf("%d", &l), l + 1)
{
for(int j = sum; j >= 0; j--)
{
if(mk[i][j]) mk[i][j + l] = 1;
}
sum += l;
}
if(sum < ans) ans = sum;
}
int k;
for(k = ans; k; k--)
{
sum = 0;
for(int i = 0; i < n; i++)
{
if(mk[i][k]) sum++;
}
if(sum == n) break;
}
printf("%d\n", k);
}
return 0;
}