//第一种写法
#include<cstdio>#include<algorithm>
using namespace std;
int n;
int w[5005], e[5005];
bool f(int mid) {
mid=mid+1;
int a=0,b=0,sum=0,nw=0,ne=0;
for (int i=0;i<n;i++){
a+=w[i];b+=e[i];
if (a>mid){
//if (a-mid>nw)return false;是错的没考虑条件1;
if (a-mid>nw||a-mid>sum)return false;
nw-=a-mid;
sum-=a-mid;
a=mid;
}
if (b>mid){
//if (b-mid>ne)return false;是错的没考虑条件1;
if (b-mid>ne||b-mid>sum)return false;
ne-=b-mid;
sum-=b-mid;
b=mid;
}
if (nw<a)nw++;
if (ne<b)ne++;
if (sum<a+b)sum++;
}
return true;
}
int main() {
int t;scanf("%d", &t);
while (t--) {
scanf("%d", &n);
int sum1=0,sum2=0;
for (int i = 0;i < n;i++) {
scanf("%d%d", &w[i], &e[i]);
sum1+=w[i];sum2+=e[i];
}
int l = 0, r = max(sum1,sum2);
while (l < r) {
int mid = l+(r-l) / 2;
if (f(mid))r = mid;
else l = mid+1;
}
printf("%d\n", l);
}
return0;
}
//第二种写法#include<cstdio>#include<algorithm>usingnamespacestd;
int n;
int w[5005], e[5005];
bool f(int mid) {
mid=mid+1;
int a = 0, b = 0, p = 0,pa=0,pb=0;
int x, y;
for (int i = 0;i < n;i++) {
a += w[i];b += e[i];
x = max(a - mid, 0);
y = max(b - mid, 0);
//if (x + y > p)return false;是错的没考虑条件2;if (x + y > p||x>pa||y>pb)returnfalse;
if (a == 0 && b > 0)b--;
elseif (a > 0 && b == 0)a--;
elseif (a > 0 && b > 0 ){
if (a + b > p)p++;
if (a>pa)pa++;//统计w上可以飞走的飞机个数if (b>pb)pb++;//统计e上可以飞走的飞机个数
}
}
returntrue;
}
int main() {
int t;scanf("%d", &t);
while (t--) {
scanf("%d", &n);
int sum1=0,sum2=0;
for (int i = 0;i < n;i++) {
scanf("%d%d", &w[i], &e[i]);
sum1+=w[i];sum2+=e[i];
}
int l = 0, r = max(sum1,sum2);
while (l < r) {
int mid = l+(r-l) / 2;
if (f(mid))r = mid;
else l = mid+1;
}
printf("%d\n", l);
}
return0;
}