I got WA again and again.
I cant find my bug.
Here is my code.
Can anybody check it.
Code: Select all
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXI(a,b) (a>b?a:b)
long W[110],Val[110],C[110][10010],coin[110][10010],MAX,kase,M,N;
int cmp(const void *a,const void *b)
{
int *p=(int *)a;
int *q=(int *)b;
return (*p-*q);
}
void MCarry()
{
MAX=100000;
int i, j,check;
for(i = 1; i<=N; i++)
for(j = W[1]; j<=10000; j++)
{
if(W[i] > j)
{
C[i][j] = C[i-1][j];
coin[i][j]=coin[i-1][j];
}
else
{
check = MAXI(C[i-1][j], C[i-1][j - W[i]] + Val[i]);
if(check==j && (C[i-1][j] <= (C[i-1][j - W[i]] + Val[i]) ) )
{
C[i][j] = MAXI(C[i-1][j], C[i-1][j - W[i]] + Val[i]);
coin[i][j]+=(coin[i-1][j-W[i]]+1);
}
if(check==j && (C[i-1][j] > (C[i-1][j - W[i]] + Val[i]) ) )
{
C[i][j] = MAXI(C[i-1][j], C[i-1][j - W[i]] + Val[i]);
coin[i][j]+=coin[i-1][j];
}
if(j > MAX) break;
if(j > M && C[i][j]!=0 && MAX > j)
MAX=j;
}
}
}
int main()
{
// freopen("h.txt","r",stdin);
long i;
scanf("%ld",&kase);
while(kase--)
{
memset(coin,0,sizeof(coin));
memset(C,0,sizeof(C));
scanf("%ld",&M);
scanf("%ld",&N);
for(i=1;i<=N;i++)
{
scanf("%ld",&W[i]);
Val[i]=W[i];
}
qsort((void *)W, N+1, sizeof(W[0]), cmp);
for(i=1;i<=N;i++)
Val[i]=W[i];
MCarry();
if(C[N][M])
{
printf("%ld %ld\n",C[N][M],coin[N][M]);
}
else
{
printf("%ld %ld\n",C[N][MAX],coin[N][MAX]);
}
}
return 0;
}