Zeros and Ones UVA - 12063

发布时间 2023-04-11 18:43:50作者: towboat

 

 

给出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) ;
 }