Pagini recente » Cod sursa (job #2896331) | Cod sursa (job #1915879) | Cod sursa (job #1191172) | Cod sursa (job #1878478) | Cod sursa (job #1772330)
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MaxN 75005
#define MAX 131072
using namespace std;
FILE *IN,*OUT;
int pos=0,out=0,sign,N,Val,Max=0,G,S=0;
char f[MAX],Out[MAX],str[10];
bool v[MaxN];
unsigned short L[MaxN];
inline int min2(int a,int b)
{
if(a>b)return b;
else return a;
}
inline void Write_Ch(char ch)
{
Out[out++]=ch;
if(out==MAX)
fwrite(Out,MAX,1,OUT),out=0;
}
inline void Write_Int(int nr)
{
int x=0;
if(nr<0)Write_Ch('-'),nr=-nr;
do
{
str[x++]=nr%10+'0';
nr/=10;
}
while(nr);
while(x>0)
Write_Ch(str[--x]);
}
inline void Read(int &nr)
{
sign=0;
nr=0;
while(f[pos]<'0'||f[pos]>'9')
{
if(f[pos]=='-')sign=1;
pos++;
if(pos==MAX)
fread(f,MAX,1,IN),pos=0;
}
while(f[pos]>='0'&&f[pos]<='9')
{
nr=10*nr+f[pos++]-'0';
if(pos==MAX)
fread(f,MAX,1,IN),pos=0;
}
if(sign)nr=-nr;
}
int main()
{
IN=fopen("ghiozdan.in","r");
OUT=fopen("ghiozdan.out","w");
fread(f,1,MAX,IN);
Read(N);Read(G);
L[0]=0,v[0]=true;
for(int j=1;j<=N;++j)
{
Read(Val);
for(int i=min2(S,G-Val);i>=0;--i)
if(v[i]&&(!v[i+Val]||L[i+Val]>1+L[i]))v[i+Val]=true,L[i+Val]=1+L[i];
S+=Val;
}
for(int i=G;Max==0;i--)
if(v[i])Max=i;
Write_Int(Max),Write_Ch(' '),Write_Int(L[Max]),Write_Ch('\n');
/*while(pre[Max]!=-1)
{
Write_Int(pre[Max]),Write_Ch('\n');
Max-=pre[Max];
}*/
if(out>0)fwrite(Out,1,out,OUT);
return 0;
}