/*ACMer:MDK
2011-04-19 18:20:35 Accepted 1558 C++ 0 196 MDK */
#include<stdio.h>
#include<iostream>
#include<limits.h>
#include<string.h>
#include<math.h>
#define MAXN 2005
usingnamespace std;
int num[14]={0},opt[MAXN]= {0};
int fun(int n)
{
if(n==0) return0;
if(opt[n]) return opt[n];
opt[n] = INT_MAX;
for(int j =1; j<=12; j++)
if(n-num[j]>=0) opt[n] = min(opt[n],fun(n-num[j])+1);
for(int j =1; j<=6; j++)
if(n+num[j]<=2000) opt[n] = min(opt[n],fun(n+num[j])+1);
return opt[n];
}
int main()
{
//freopen("d:\\1.txt","r",stdin);
int N,a=0;
cin>>N;
while(N--)
{
memset(num, 0, sizeof(num));
memset(opt, 0, sizeof(opt));
int sum =0,big =-1;
for(int i=1; i<=6; i++)
scanf("%d",&num[i]),num[i+6] =-num[i];//,opt[num[i]] = 1不知道为啥在这初始化opt为1的数就出错
for(int i =1; i<=100; i++)
a=fun(i),sum+=a,big = max(a,big);//,cout<<a<<endl
printf("%.2f %d\n",sum/100.0,big);
}
}
2011-04-19 18:20:35 Accepted 1558 C++ 0 196 MDK */
#include<stdio.h>
#include<iostream>
#include<limits.h>
#include<string.h>
#include<math.h>
#define MAXN 2005
usingnamespace std;
int num[14]={0},opt[MAXN]= {0};
int fun(int n)
{
if(n==0) return0;
if(opt[n]) return opt[n];
opt[n] = INT_MAX;
for(int j =1; j<=12; j++)
if(n-num[j]>=0) opt[n] = min(opt[n],fun(n-num[j])+1);
for(int j =1; j<=6; j++)
if(n+num[j]<=2000) opt[n] = min(opt[n],fun(n+num[j])+1);
return opt[n];
}
int main()
{
//freopen("d:\\1.txt","r",stdin);
int N,a=0;
cin>>N;
while(N--)
{
memset(num, 0, sizeof(num));
memset(opt, 0, sizeof(opt));
int sum =0,big =-1;
for(int i=1; i<=6; i++)
scanf("%d",&num[i]),num[i+6] =-num[i];//,opt[num[i]] = 1不知道为啥在这初始化opt为1的数就出错
for(int i =1; i<=100; i++)
a=fun(i),sum+=a,big = max(a,big);//,cout<<a<<endl
printf("%.2f %d\n",sum/100.0,big);
}
}
浙公网安备 33010602011771号