NC228076. 数字匹配
描述
输入描述
读入共一行,包括两个正整数n,k(n≤2000,k≤10)
输出描述
输出共一行,表示匹配数
示例1
输入:
6 2
输出:
7
说明:
2(10)和4(100)C++ 解法, 执行用时: 44ms, 内存消耗: 16856K, 提交时间: 2021-11-05 22:11:15
#include <bits/stdc++.h> using namespace std; #define b(x) (1<<((x)-1)) int i,j,n,m,t,res,f[2050][2050],msk; int dfs(int x,int y){ if(b(m)>x||b(m)>y)return 0; if(~f[x][y])return f[x][y]; return f[x][y]=((x&msk)==(y&msk))?1:(dfs(x>>1,y)|dfs(x,y>>1)); } int main() { memset(f,-1,sizeof(f)); cin>>n>>m; msk=b(m+1)-1; for(i=1;i<=n;i++)for(j=i+1;j<=n;j++)res+=dfs(i,j); cout<<res; }