27分,求助

P1282 多米诺骨牌

```cpp #include<cstdio> #include<algorithm> using namespace std; const int N=5007; int a[N],b[N],f[N/5+6][N*3+6],n; int main(){ freopen("1282.in","r",stdin); freopen("1282.out","w",stdout); int i,j; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]); for(i=0;i<=N*2;i++) f[0][i]=N; for(i=1,f[0][N]=0;i<=n;i++) for(j=0;j<=N;j++){ f[i][j+N]=min(f[i-1][j+a[i]-b[i]+N],f[i-1][j+b[i]-a[i]+N]+1); f[i][N-j]=min(f[i-1][a[i]-b[i]+N-j],f[i-1][b[i]-a[i]+N-j]+1); } for(i=1;i<=N;i++) if(min(f[n][N-i],f[n][N+i])<n){ printf("%d\n",min(f[n][N-i],f[n][N+i])); return 0; } printf("0\n"); return 0; } 神奇~我样例都没过,居然还能对6个点 ```
by 以墨 @ 2017-09-28 22:22:56


|