重点建设政协网站,wordpress进销存,广州公司注册名称查询,网站建设伍金手指下拉3传送门 以二维的两个点\((x1,y1),(x2,y2)\)为例#xff0c;那么他们之间的曼哈顿距离肯定为一下四个之一\((x1-x2)(y1-y2)\),\((x2-x1)(y1-y2)\),\((x1-x2)(y2-y1)\),\((x2-x1)(y2-y1)\)#xff0c;而且为这四个里面最大的 然后搞一搞可以变成下面的样子\((x1y1)-(x2y2)\),\(…传送门 以二维的两个点\((x1,y1),(x2,y2)\)为例那么他们之间的曼哈顿距离肯定为一下四个之一\((x1-x2)(y1-y2)\),\((x2-x1)(y1-y2)\),\((x1-x2)(y2-y1)\),\((x2-x1)(y2-y1)\)而且为这四个里面最大的 然后搞一搞可以变成下面的样子\((x1y1)-(x2y2)\),\((x1-y1)-(x2-y2)\),\((-x1y1)-(-x2y2)\),\((-x1-y1)-(-x2-y2)\) 发现每一个形式里面每一维坐标前的符号都是相等的。那么我们可以枚举符号的状态然后找到在这个状态下的最大的和最小的数用两数相减去更新答案 不难证明高维的情况也可以转化成这样这里就不证了才不是因为懒呢 upd:或者也可以认为两个点各坐标的符号相反于是只要对于每一个状态维护它的最大值然后用互补状态的最大值之和更新答案就可以了 //minamoto
#includebits/stdc.h
#define R register
#define inf 0x3f3f3f3f
#define fp(i,a,b) for(R int ia,Ib1;iI;i)
#define fd(i,a,b) for(R int ia,Ib-1;iI;--i)
#define go(u) for(int ihead[u],ve[i].v;i;ie[i].nx,ve[i].v)
templateclass Tinline bool cmax(Ta,const Tb){return ab?ab,1:0;}
templateclass Tinline bool cmin(Ta,const Tb){return ab?ab,1:0;}
using namespace std;
char buf[121],*p1buf,*p2buf;
inline char getc(){return p1p2(p2(p1buf)fread(buf,1,121,stdin),p1p2)?EOF:*p1;}
int read(){R int res,f1;R char ch;while((chgetc())9||ch0)(ch-)(f-1);for(resch-0;(chgetc())0ch9;resres*10ch-0);return res*f;
}
const int N1e65;
const int D[]{2,4,8,16};
int sum[19][N],a[N][5],n,m,ans,lim,mn,mx;
int main(){
// freopen(testdata.in,r,stdin);nread(),mread(),limD[m-1];fp(i,1,n){fp(j,1,m)a[i][j]read();fp(k,0,lim-1)fp(j,1,m)sum[k][i](k(j-1)1)?a[i][j]:-a[i][j];}fp(k,0,lim-1){mninf,mx-inf;fp(j,1,n)cmax(mx,sum[k][j]),cmin(mn,sum[k][j]);cmax(ans,mx-mn);}printf(%d\n,ans);return 0;
} 转载于:https://www.cnblogs.com/bztMinamoto/p/10151307.html