数据少,比较简单的dfs,cin改scanf可达0ms
#include<iostream>
#include<map>
#include<string>
#include<algorithm>
#include<fstream>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<math.h>
using namespace std;
#define lch(i) ((i)<<1)
#define rch(i) ((i)<<1|1)
#define sqr(i) ((i)*(i))
#define pii pair<int,int>
#define mp make_pair
#define FOR(i,b,e) for(int i=b;i<=e;i++)
#define FORE(i,b,e) for(int i=b;i>=e;i--)
#define ms(a) memset(a,0,sizeof(a))
const int maxnum =21252;
const int mod = 10007;
int n,m;
int type[26];
int typenum,snum,hval;
int choose[5];
int ans[5];
bool flag;
void dfs(int sum,int num,int tnum,int nth,int h){
if(sum==m){
if(tnum>typenum){
typenum=tnum;
snum=num;
hval=h;
flag=0;
memcpy(ans,choose,sizeof(ans));
}
else if(tnum==typenum){
if(num<snum){
snum=num;
hval=h;
flag=0;
memcpy(ans,choose,sizeof(ans));
}else if(snum==num){
if(h>hval){
hval=h;
flag=0;
memcpy(ans,choose,sizeof(ans));
}
else if(h==hval)
flag=1;
}
}
return;
}
if(num>=4||nth>=n)return;
for(int i=0;sum+i*type[nth]<=m&&num+i<5;i++){
if(i)
choose[num+i]=type[nth];
dfs(sum+i*type[nth],num+i,i?tnum+1:tnum,nth+1,(type[nth]>h&&i)?type[nth]:h);
}
}
//#define _DEBUG_ 1
int main()
{
#ifdef _DEBUG_
fstream fin("G:/1.txt");
#else
#define fin cin
#endif
while (fin>>type[1])
{
n=1;
while(type[n]!=0){
fin>>type[++n];
}
while(1){
fin>>m;
if(!m)break;
typenum=snum=hval=flag=0;
dfs(0,0,0,1,0);
if(snum==0)
printf("%d ---- none\n",m);
else if(flag)
printf("%d (%d): tie\n",m,typenum);
else{
printf("%d (%d):",m,typenum);
FOR(i,1,snum)
printf(" %d",ans[i]);
printf("\n");
}
}
}
return 0;
}