```c
附:我的暴力代码
# include <iostream>
# include <algorithm>
# include <cstring>
# include <cstdio>
# include <math.h>
# define MAX 1001
# define INF 10000
# define fr(i,a,b) for(i=a;i<=b;++i)
using namespace std;
int min_(int x,int y)
{
if(x==-1) return y;
if(y==-1) return x;
if(x<y) return x;
else return y;
}
int n,m,ans=20;
int a[MAX][2]={0};
int f[MAX][400]={0}; //上下最大差不超过150,超过时可证一定不是最小
int main()
{
int i,j,x,y,k,s,t,cnt=0,cha;
cin>>n;
memset(f,-1,sizeof(f));
f[0][0]=0;
//cout<<f[1][1]<<endl;
fr(i,1,n)
{
cin>>x>>y;
cha=abs(x-y);
t=x-y;
fr(j,-150,150)
{
if(j<0) s=-j+150;
else s=j;
if(t==0)
{
f[i][s]=min_(f[i-1][s],f[i][s]);
continue;
}
if(j-cha>=-150)
{
if(j-cha>=0) k=j-cha;
else k=-(j-cha)+150;
if(f[i-1][s]!=-1)
{
if(t>0)
{
f[i][k]=min_(f[i-1][s]+1,f[i][k]);
}
else if(t<0)
{
f[i][k]=min_(f[i-1][s],f[i][k]);
}
}
}
if(j+cha<=150)
{
if(j+cha>=0) k=j+cha;
else k=-(j+cha)+150;
if(f[i-1][s]!=-1)
{
if(t>0)
{
f[i][k]=min_(f[i-1][s],f[i][k]);
}
else if(t<0)
{
f[i][k]=min_(f[i][k],f[i-1][s]+1);
}
}
}
}
}
int can=0;
fr(i,0,150)
{
if(f[n][i]!=-1)
{
ans=min_(f[n][i],n-f[n][i]);
can=1;
}
if(f[n][i+150]!=-1&&i!=0){
ans=min_(ans,min_(f[n][i+150],n-f[n][i+150]));
can=1;
}
if(can==1) break;
}
cout<<ans;
return 0;
}
```
by 余越 @ 2018-06-25 11:34:12
%%%
by Sheffield @ 2018-06-25 12:23:24
%%%
by d3NtMDAw @ 2018-06-25 12:25:20
那么,不就好,了么…、、、%%%
by 初音ミク_Miku @ 2018-06-25 12:41:22
%%%(保持队形)
by _FILARET_ @ 2018-06-25 13:37:17
%%%
by BuXiangJuanLe @ 2018-09-03 10:58:15