int c1[250001]; //代表多项式的系数 int c2[250001]; //暂存 int a[55][2]; //0记录价值,1记录数量 int main() { int n; while(cin >> n){ if(n<0) break; int sum=0; for(int i=0;i<n;i++) { cin >> a[i][0] >> a[i][1]; sum+=a[i][0]*a[i][1]; } for (int i=0;i<=sum;i++){ c1[i] = 0; c2[i] = 0; } for (int i=0;i<=a[0][1];i++){ //对第一个进行初始化 c1[i * a[0][0]] = 1; } for (int i=1;i<n;i++){ for (int j=0;j<=sum;j++){ for (int k=0;k<=a[i][0] * a[i][1];k+=a[i][0]){ c2[j+k] += c1[j]; } } for (int j=0;j<=sum;j++){ c1[j] = c2[j]; c2[j] = 0; } } // 从一半开始找 int m; if(sum%2==0) m=sum/2; else m=sum/2+1; for (int j=m;;j++){ if(c1[j] != 0){//如果系数不等于0,存在这种可能性,则输出 printf("%d %d\n",j,sum-j); break; } } } return 0; }