考虑了正负,还是WA了
我输出了350(应该是352)
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+100;
const int M=N*6+100;
int n,x,sum,MAX,MIN;
int a[N],b[N];
int v[N],minx,ans;
int dp[M*3+100];
int hf[M*3+100];
main(){
cin>>n;
minx=0x3f3f3f3f;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
sum+=a[i]-b[i];
v[i]=(b[i]-a[i])*2;
// cout<<v[i]<<endl;
if(v[i]>=0)MAX+=v[i];
else MIN+=v[i];
}
dp[0+M]=true;
hf[0+M]=0;
for(int i=1;i<=n;i++){
for(int j=MAX+1;j>=MIN-1;j--){
if(dp[j-v[i]+M]==true){
dp[j+M]=true;
// cout<<j<<" from "<<j-v[i]<<endl;
if(j!=0&&hf[j+M]==0)hf[j+M]=hf[j-v[i]+M]+1;
else hf[j+M]=min(hf[j+M],hf[j-v[i]+M]+1);
}
}
}
// cout<<MIN<<" "<<MAX<<" "<<sum<<endl;
for(int i=MIN;i<=MAX;i++){
if(dp[i+M]){
// cout<<i<<" "<<hf[i]<<endl;
if(minx>abs(sum+i)){
// cout<<"!"<<i<<" "<<hf[i]<<" "<<abs(sum+i)<<endl;
minx=abs(sum+i);
ans=hf[i+M];
}
else if(minx==abs(sum+i)){
// cout<<"#"<<i<<" "<<hf[i]<<" "<<abs(sum+i)<<endl;
ans=min(ans,hf[i+M]);
}
}
}
cout<<ans<<endl;
return 0;
}