网站弹屏广告怎么做,做门户类网站多少钱,免费网页设计系统模板,设计软件手机题意#xff1a;一个$n\times m$的数表#xff0c;数值$\in[0,4)$#xff0c;你可以任意次选择一行或一列$1,\text{mod }4$#xff0c;要最小化所有数的和 因为$n\leq10$#xff0c;所以数表可以看成$m$个$n$位$4$进制数$a_{1\cdots m}$#xff0c;以下使用不进位加法 定…题意一个$n\times m$的数表数值$\in[0,4)$你可以任意次选择一行或一列$1,\text{mod }4$要最小化所有数的和 因为$n\leq10$所以数表可以看成$m$个$n$位$4$进制数$a_{1\cdots m}$以下使用不进位加法 定义$f(x)\min\limits_{i0}^3\left(x(i\cdots i)_4\right)$如果确定了行的方案$s$答案就是$\sum\limits_if(a_is)$ 记$c_x$为$x$在$a_{1\cdots m}$中的出现次数$\text{ans}(s)\sum\limits_xc_xf(xs)\sum\limits_{abs}c_{-a}f(b)$是一个高维循环卷积 高维卷积需要用到高维FFT根据wiki只需在每一维分别dft即可时间复杂度$O(n4^n)$ #includestdio.h
#includealgorithm
using namespace std;
typedef long long ll;
const int mod998244353,inf2147483647;
int mul(int a,int b){return(ll)a*b%mod;}
int ad(int a,int b){return(ab)mod?a-mod:a;}
int pow(int a,int b){int s1;while(b){if(b1)smul(s,a);amul(a,a);b1;}return s;
}
int*w[5],iN;
void pre(){int i,j,t;for(i2;i4;i1){w[i]new int[i1];tpow(3,(mod-1)/i);w[i][0]1;for(j1;ji;j)w[i][j]mul(w[i][j-1],t);}iNpow(4,mod-2);
}
void dft4(int*a,int sh,int on){#define a(i) a[(i)sh]const int N4;int i,j,k,t;swap(a(1),a(2));for(i2;iN;i1){for(j0;jN;ji){for(k0;ki1;k){tmul(a(i/2jk),w[i][on1?k:i-k]);a(i/2jk)ad(a(jk),mod-t);a(jk)ad(a(jk),t);}}}if(on-1){for(i0;iN;i)a(i)mul(a(i),iN);}#undef a
}
int n,N;
void dft(int*a,int on){int i,j;for(j0;jn;j){for(i0;iN;i){if(!(ij*23))dft4(ai,j*2,on);}}
}
int a[10010];
int c[1048576],f[1048576];
int t[4];
int main(){int m,i,j,x,res;scanf(%d%d,n,m);N1n*2;for(i1;in;i){for(j1;jm;j){scanf(%d,x);a[j]a[j]2|x;}}for(i1;im;i)c[a[i]];reverse(c,cN);for(i0;iN;i){t[0]t[1]t[2]t[3]0;for(j0;jn;j)t[ij*23];f[i]min(min(t[1]2*t[2]3*t[3],t[0]2*t[1]3*t[2]),min(t[3]2*t[0]3*t[1],t[2]2*t[3]3*t[0]));}pre();dft(c,1);dft(f,1);for(i0;iN;i)c[i]mul(c[i],f[i]);dft(c,-1);resinf;for(i0;iN;i)resmin(res,c[i]);printf(%d,res);
}转载于:https://www.cnblogs.com/jefflyy/p/10809114.html