搜完全背包题时翻到的。。
BFS比背包高效简单多了。。
#include<iostream>
#include <string>
#include<vector>
#include<algorithm>
#include<set>
#include<fstream>
#include<cmath>
#include<queue>
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 =155;
int tol,n,m;
int dp[205];
int c[7];
void BFS(){
queue<int> que;
FOR(i,1,6){
que.push(c[i]);
}
int lel=1;
int pi;
while(!que.empty()){
pi=que.front();
que.pop();
FOR(i,1,6){
if(pi-c[i]>0&&!dp[pi-c[i]]){
dp[pi-c[i]]=dp[pi]+1;
que.push(pi-c[i]);
}
if(pi+c[i]<=200&&!dp[pi+c[i]]){
dp[pi+c[i]]=dp[pi]+1;
que.push(pi+c[i]);
}
}
}
}
int main()
{
//fstream fin("G:/1.txt");
int t,most;
cin>>t;
//fin>>t;
while(t--){
ms(c);
ms(dp);
FOR(i,1,6){
//fin>>c[i];
scanf("%d",&c[i]);
dp[c[i]]=1;
}
BFS();
tol=0;int mn=0;
FOR(i,1,100){
tol+=dp[i];
mn = max(mn,dp[i]);
}
printf("%.2f %d\n",(float)tol/100,mn);
}
return 0;
}