I got AC by doing
dpfun[i + 1][j] = max(dpfun[i][j], dpfun[i][j - cost[i]] + fun[i]);
if (dpfun[i][j] < dpfun[i][j - cost[i]] + fun[i]) {
dpcost[i + 1][j] = dpcost[i][j-cost[i]] + cost[i];
} else if(dpfun[i][j] > dpfun[i][j - cost[i]] + fun[i]) {
dpcost[i + 1][j] = dpcost[i][j];
}
else
{
dpcost[i + 1][j] = min(dpcost[i][j-cost[i]] + cost[i], dpcost[i][j]);
}
and at beginning of each case
memset(dpfun,0,sizeof(dpfun));
memset(dpcost,0,sizeof(dpcost));