MDeath-Kid

- M I T & Y
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ZOJ 1558 Euro Efficiency

Posted on 2011-11-09 20:37  MDeath-Kid  阅读(282)  评论(0)    收藏  举报
/*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);
}
}