#include "cstdio"
#include "cmath"
#include "fstream"
#include "cstring"
#include "algorithm"
#include "iostream"
#include "vector"
#include "queue"
#include "stack"
#include "set"
#include "map"
#define lson root<<1
#define rson root<<1|1
#define lowbit(i) i&(-i)
#define debug(x) cout<<#x<<"="<<x<<endl;
#define here cout<<endl<<"_______________here "<<endl;
#define INF 0x7f7f7f7f
#define LINF 0x7f7f7f7f7f7f7f7f
#define Prime 999983
#define N 12
using namespace std;
int weight[N];
int dp1[1<<N], dp2[1<<N];
int n, cap1, cap2;
int getwei(int state)
{
int tot(0);
for(int i = 0; i < n; i++)
{
if(state & (1<<i))
tot += weight;
}
return tot;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif
int T, t(1), gg, minn;
scanf("%d", &T);
while(T--)
{
minn = INF;
scanf("%d%d%d", &n, &cap1, &cap2);
for(int i = 0; i < n; i++)
scanf("%d", weight + i);
memset(dp1, 9999, sizeof(dp1));
memset(dp2, 9999, sizeof(dp2));
dp1[0] = dp2[0] = 0;
for(int state = 0; state < (1<<n); state++)
{
gg = getwei(state);
if(gg <= cap1)
dp1[state] = 1;
else
for(int i = 0; i <= state; i++)
dp1[state] = min(dp1[state], dp1[state ^ i] + dp1);
if(gg <= cap2)
dp2[state] = 1;
else
for(int i = 0; i <= state; i++)
dp2[state] = min(dp2[state], dp2[state ^ i] + dp2);
}
for(int i = 0; i < (1<<n); i++)
for(int j = 0; j < (1<<n); j++)
if((i | j) == (1<<n) - 1)
minn = min(minn, max(dp1, dp2[j]));
printf("Scenario #%d:\n%d\n\n",t++, minn);
}
return 0;
}
![]()
|
|