rt。
改前过了,把第一位删去后46.
46代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+6;
const int M=1e3+7;
const int IM=214748364;
const long long LLM=9223372036854775807;
inline int read()
{
int x=0,y=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-') y=-y;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^'0');c=getchar();}
return x*y;
}
int n,sum,a[N],b[N],f[6*N];
signed main()
{
// freopen("1.in","r",stdin);
n=read();
for(int i=1;i<=n;i++) a[i]=read(),b[i]=read(),sum+=a[i]+b[i];
for(int i=1;i<=n;i++) for(int j=0;j<=6*n;j++) f[j]=IM;
f[a[1]]=0,f[b[1]]=1;
for(int i=1;i<=n;i++)
{
for(int j=6*n;j;j--)
{
if(j>=a[i]) f[j]=min(f[j],f[j-a[i]]);
if(j>=b[i]) f[j]=min(f[j],f[j-b[i]]+1);
}
}
int minD=IM,minT=IM;
for (int i=0;i<=6*n;i++)
if(f[i]!=IM)
{
if(abs(2*i-sum)<minD) minD=abs(i-(sum-i)),minT=f[i];
else if(abs(2*i-sum)==minD) minT=min(minT,f[i]);
}
printf("%d", minT);
return 0;
}