pku 1010 dfs
//dfs 做了两天 调试了半天 发现va 是关键字说 突然变0了 自己ubuntu上的g++题目给的数据都没过 提交竟ac了说
#include <iostream>
#include <algorithm>using namespace std;
int value[10010], customer[10010], cnt[50];
int av, result, types, flag, maxvalue, re[4];
int retypes, remaxvalue, renum, num[4];
void check(int now)
{
maxvalue = types = 0;
int i, j;
for (i = 0; i < now; ++i)
{
if (value[re[i]] > maxvalue)
{
maxvalue = value[re[i]];
}
bool flag = true;
for(j = 0; j < i; j++)
{
if(re[i] == re[j])
{
flag = false;
}
}
if(flag)
{
types++;
}
}
}
void dfs(int pos, int now, int n)
{
if (now > 4)
{
return;
}
else if (result == 0)
{
check(now);
if (types > retypes || (types == retypes && now < renum) || (types == retypes &&
now == renum && maxvalue > remaxvalue))
{
retypes = types;
renum = now;
remaxvalue = maxvalue;
int j;
for (j = 0; j < now; ++j)
{
num[j] = re[j];
}
flag = 0;
}
else if (types == retypes && now == renum && maxvalue == remaxvalue)
{
flag = 1;
}
return;
}
else
{
int i;
for (i = pos; i < n; ++i)
{
result -= value[i];
if (result >= 0)
{
re[now++] = i;
dfs(i, now, n);
now--;
}
result += value[i];
}
}
}
int main()
{
int a, b, i, n;
while (scanf("%d", &a) != EOF && a)
{
memset(cnt, 0, sizeof(cnt));
cnt[a]++;
value[0] = a;
n = 1;
while (scanf("%d", &a) != EOF && a)
{
if (cnt[a] < 4)
{
cnt[a]++;
value[n++] = a;
}
}
sort(value, value + n);
av = 0;
while (scanf("%d", &b) != EOF && b)
{
customer[av++] = b;
}
for (i = 0; i < av; ++i)
{
printf("%d ", customer[i]);
result = customer[i];
memset(re, -1 ,sizeof(re));
retypes = 0;
remaxvalue = 0;
renum = 5;
flag = 0;
dfs(0, 0, n);
if (retypes)
{
printf("(%d):", retypes);
if (!flag)
{
int j;
for (j = 0; j < renum; ++j)
{
printf(" %d", value[num[j]]);
}
printf("\n");
}
else
{
printf(" tie\n");
}
}
else
{
printf("---- none\n");
}
}
}
return 0;
}
浙公网安备 33010602011771号