曼哈顿距离,两个点设为(x1,y1),(x2,y2),其距离为|x1-x2|+|y1-y2|
#include#include #include #include using namespace std;struct node{ int pos; int sum; bool operator < (const node &p) const { return p.sum>sum; } node (int x,int y) { pos=x; sum=y; }};set s[34];int n,m,cnt;int f_a[34][5],v[5];bool d[60010];void dfs(int cur){ if(cur==m) { for(int i=0; i ::iterator p,q; while(s[i].size()) { p=s[i].begin(); if(d[p->pos]) s[i].erase(*p); else break; } while(s[i].size()) { q=s[i].end(); --q; if(d[q->pos]) s[i].erase(*q); else break; } if(!s[i].size()) continue; sum=max(sum,q->sum - p->sum); } printf("%d\n",sum);}int main(){ //freopen("in.txt","r",stdin); while(scanf("%d%d",&n,&m)!=EOF) { int f,pos; cnt=0; memset(d,0,sizeof(bool)*(n+1)); dfs(0); for(int i=1; i<=n; ++i) { scanf("%d",&f); if(!f) for(int j=0; j