http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1558
#include <vector>
#include <list>
#include <map>
#include <set>
#include <string.h>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
#define LL long long
#define pi acos(-1)
#define N 1<<20+10
#define INF 999999999
#define eps 1e-8
//****************************************
//zoj1558 DP
//Copyright@leolin All rights reserved.
//****************************************
//状态方程:dp[a[i]+j]=min(dp[a[i]+j],dp[j]+1);
int a[10];
int dp[1000];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,j,k;
while(n--)
{
for(i=0;i<6;i++)
scanf("%d",&a[i]);
for(i=0;i<=300;i++)
dp[i]=INF;
dp[0]=0;
for(k=0;k<20;k++)//用来拟合精度
for(i=0;i<6;i++)
{
for(j=0;j<=200;j++)
{
if(a[i]+j<=200)
dp[a[i]+j]=min(dp[a[i]+j],dp[j]+1);
if(j-a[i]>=0)
dp[j-a[i]]=min(dp[j-a[i]],dp[j]+1);
}
}
int ans=0;
int sum=0;
for(i=1;i<=100;i++)
{
sum+=dp[i];
if(dp[i]>ans)ans=dp[i];
}
printf("%.2f %d\n",double(sum)/100.0,ans);
}
}
return 0;
}