题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1301

参考博客:https://blog.csdn.net/qq_33229466/article/details/78418414

原来是DP。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int const maxn=,mod=1e9+;
int n,m,w,bin[];
ll ans,f[][][];
int get(int x){int ret=; while(x)ret++,x>>=; return ret;}
void init()
{
bin[]=;
for(int i=;i<;i++)bin[i]=(bin[i-]<<);
}
int main()
{
init();
scanf("%d%d",&n,&m); w=get(max(n,m));
for(int i=,p,q;i<=w;i++)
{
memset(f,,sizeof f);
p=; f[][][]=;
int lim=;
for(int j=;j<=max(n,m);j++)//枚举数
{
p^=; q=!p;
if(j>=bin[lim])lim++;
// int tmp=(j&bin[i]); //j&bin[i]不仅是0或1!!!
bool tmp=(j&bin[i]);
for(int s=;s<bin[lim];s++)//<
{
f[p][s][]=f[q][s][]; f[p][s][]=f[q][s][];
for(int k=;k<=;k++)
{
if(j<=m)(f[p][s][k]+=f[q][s^j][k^tmp])%=mod;//给B
if(j<=n)(f[p][s][k]+=f[q][s^j][k])%=mod;//给A
}
}
}
for(int s=bin[i];s<bin[i+];s++)ans=(ans+f[p][s][])%mod;
}
printf("%lld\n",ans);
return ;
}

51Nod 1301 集合异或和 —— 异或DP的更多相关文章

  1. 51nod 1301 集合异或和——异或dp

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1301 好题!看了TJ才会. 因为是不可重集合,所以当然有前 i 个 ...

  2. 51nod 1301 集合异或和(DP)

    因为当\(A<B\)时,会存在在二进制下的一位,满足这一位B的这一位是\(1\),\(A\)的这一位是\(0\). 我们枚举最大的这一位.设为\(x\)吧. 设计状态.\(dp[i][j][1/ ...

  3. [51nod] 1301 集合异或和

    考虑不限制xor{Y}>xor{X} 考虑n=m的情况,每个数i∈[1,n]可以被分配到X集合或Y集合,或不分配 设f[S]表示{X} xor {Y} == S的方案数 有f[S]+=2*f[S ...

  4. [51Nod 1301] 集合异或和 (dp)

    传送门 Solution 一道比较好的dp题 想了半天组合数QAQ 首先要知道的是 A<B一定是B有一位是1且A的这位是0且前面都相等 那么肯定是要枚举这一位在哪里然后求出方案数 方案数考虑类似 ...

  5. bzoj 4017 子序列和的异或以及异或的和

    位运算很好的一个性质是可以单独每一位考虑..... 题解请看:http://blog.csdn.net/skywalkert/article/details/45401245 对于异或的和,先枚举位, ...

  6. 51Nod 1352 集合计数(扩展欧几里德)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1352 题目大意: 给出N个固定集合{1,N},{2,N-1} ...

  7. [BZOJ3261] 最大异或和 (异或前缀和,可持久化Trie)

    Description 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Q l r x:询问操作, ...

  8. 异或序列 [set优化DP]

    也许更好的阅读体验 \(\mathcal{Description}\) 有一个长度为 \(n\)的自然数序列 \(a\),要求将这个序列分成至少 \(m\) 个连续子段 每个子段的价值为该子段的所有数 ...

  9. 51nod 1622 集合对[算法马拉松19 C]

    题目链接:https://www.51nod.com/contest/problem.html#!problemId=1622 第一次参加算法马拉松,我就是去看大神们疯狂秒题,然后感受绝望的orz.. ...

随机推荐

  1. 11Oracle Database 视图

    Oracle Database 视图 视图语法 create [or replace] view <名字> as <select 语句> 视图用于简化查询,视图中实际存放的是一 ...

  2. 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"

    14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误" One of the configured ...

  3. 在MONO Design中使用Flex3D

    在项目开发组的努力下,HTML5 3D 的开发包变得越来越优秀,越来越健壮:基于HTML5 3D技术的MONO Design建模平台功能也变得越来越强大和完善,这个方便了很多使用我们HTML5 3D的 ...

  4. xmpp使用经验

    IM 标准协议有XMPP\IMPP\PRIM\SIP(SIMPLE)等,其中XMPP基于XML的协议,具备了很好的扩展性(依靠XML的域名空间)并且可以建立在TLS上使用SASL认证. 1.文件比如图 ...

  5. 利用CMD 創建新文件的機種方法

    用 CMD 創建新文件 説明一下: 是在Windows的 CMD命令行模式下,或者在PowerShell命令行模式下創建新文件的機種方法. 創建空文件 cd.>a.txt cd.表示改变当前目录 ...

  6. Linux学习笔记记录(七八)

  7. 入门系列(一) 微信小程序简介

    一.简介 1.目录结构 首先,我们使用微信公众平台提供的开发者工具,创建一个简单的小程序项目,观察项目的目录结构 不难看出,一个典型的微信小程序,通常包含一个描述整体的主体部分,以及一个描述页面的 p ...

  8. Python学习——集合

    集合 python中的集合和数学上集合具有基本相同的性质,此处不再赘述. 1.创建集合的两种方法 #直接创建 num={1,2,3,4,5} #利用set方法创建 num1=set([1,2,3,4, ...

  9. 【Codeforces 1063B】Labyrinth

    [链接] 我是链接,点我呀:) [题意] 你可以往左最多x次,往右最多y次 问你从x,y出发最多能到达多少个格子 只能往上下左右四个方向走到没有障碍的格子 [题解] 假设我们从(r,c)出发想要到固定 ...

  10. cookie & cookies

    cookie & cookies "use strict"; /** * * @author xgqfrms * @license MIT * @copyright xgq ...