给出n、k(n≤64,k≤100),有多少个n位(无前导0)二进制数的1和0一样多,且值为k的倍数? f[i][j][k]
#include <iostream> #include <cstring> #include <cmath> #include <algorithm> using namespace std ; #define ll long long int n,m; ll f[102][102][102]; void sov(int cas){ cin>>n>>m; if(m==0||(n&1)){ printf("Case %d: %lld\n",cas,0); return ; } int i,j,k; memset(f,0,sizeof f); f[1][1%m][1]= 1; for(i=1;i<n;i++) for(k=0;k<=i;k++) for(j=0;j<m;j++){ f[i+1][(j<<1)%m][k]+= f[i][j][k]; f[i+1][(j<<1|1)%m][k+1]+= f[i][j][k]; } printf("Case %d: %lld\n",cas,f[n][0][n/2]); } signed main(){ int tes,cas=0;cin>>tes; while(tes--) sov(++cas) ; }
标签:include,int,cas,Ones,tes,sov,102,UVA,12063 From: https://www.cnblogs.com/towboa/p/17307279.html