#include
<
iostream
>
using namespace std;
int data[ 20 ],sum,min;
void DFS( long item, int items, int curmin);
int main()
{
int s[4],i,j;
long result;
while(cin>>s[0]>>s[1]>>s[2]>>s[3])
{
result = 0;
for(i=0;i<4;i++)
{
sum = 0;
for(j=0;j<s[i];j++)
{
cin>>data[j];
sum += data[j];
}
min = sum;
DFS(0,s[i]-1,sum);
result += min;
}
cout<<result<<endl;
}
}
void DFS( long item, int items, int curmin)
{
if(items < 0)
{
if(min>curmin) min = curmin;
return;
}
DFS(item,items-1,curmin);
item += 1<<items;
int temp = curmin - data[items];
if(temp >= (sum+1)/2)
DFS(item,items-1,temp);
}
此题与1017类似。数据加强版是1166
using namespace std;
int data[ 20 ],sum,min;
void DFS( long item, int items, int curmin);
int main()
{
int s[4],i,j;
long result;
while(cin>>s[0]>>s[1]>>s[2]>>s[3])
{
result = 0;
for(i=0;i<4;i++)
{
sum = 0;
for(j=0;j<s[i];j++)
{
cin>>data[j];
sum += data[j];
}
min = sum;
DFS(0,s[i]-1,sum);
result += min;
}
cout<<result<<endl;
}
}
void DFS( long item, int items, int curmin)
{
if(items < 0)
{
if(min>curmin) min = curmin;
return;
}
DFS(item,items-1,curmin);
item += 1<<items;
int temp = curmin - data[items];
if(temp >= (sum+1)/2)
DFS(item,items-1,temp);
}