在AC的边缘挣扎

P1282 多米诺骨牌

```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


|