题目: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. ThinkPHP---TP功能类之公文管理功能2----------继续完善

    [前言] 之前已经完成了公文的添加和列表展示功能,今天继续完善.做下公文的编辑和删除功能. [主体] (1)分析 控制器:DocController.class.php 方法:edit(将模板展示和数 ...

  2. 习题练习(视觉slam14讲课后习题)

    设有⼩萝⼘1⼀号和⼩萝⼘⼆号位于世界坐标系中. ⼩萝⼘⼀号的位姿为:q1 = [0.55, 0.3, 0.2, 0.2], t1 = [0.7, 1.1, 0.2]T(q 的第⼀项为实部).这⾥的 q ...

  3. 这份Koa的简易Router手敲指南请收下

    上一期链接--也就是本文的基础,参考KOA,5步手写一款粗糙的web框架 本文参考仓库:点我 Router其实就是路径匹配,通过匹配路径,返回给用户相应的网站内容. 以下方例子为例,主要通过提取req ...

  4. vuecli3.x config

    module.exports = { // 基本路径 baseUrl: process.env.NODE_ENV === 'production' ? '/' : '/', // 输出文件目录 out ...

  5. Codeforces Round #530 (Div. 2) (前三题题解)

    总评 今天是个上分的好日子,可惜12:30修仙场并没有打... A. Snowball(小模拟) 我上来还以为直接能O(1)算出来没想到还能小于等于0的时候变成0,那么只能小模拟了.从最高的地方进行高 ...

  6. vue-cli npm install 失败

    1.$ npm install -g vue-cli 2.vue init webpack sell (sell 是项目) 3.然后就是自动下载模板,根据提示输入 4.cd cell => np ...

  7. 51NOD 1154 回文串的划分(DP)

    思路:参考了网上,思路很清奇,借助vis[i][j]来表示从i到j是否为回文串,回文串这边是用的双重循环来写的:dp[i]用来表示以i结尾的字符串最少的回文串有多长. #include<cstr ...

  8. 【16】AngularJS API

    AngularJS API API 意为 Application Programming Interface(应用程序编程接口). AngularJS 全局 API AngularJS 全局 API ...

  9. JavaSE 学习笔记之集合框架(十八)

    集合框架:,用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区 ...

  10. 如何相互转换逗号分隔的字符串和List --https://blog.csdn.net/yywusuoweile/article/details/50315377

    如何相互转换逗号分隔的字符串和List ---https://blog.csdn.net/yywusuoweile/article/details/50315377 方法 2: 利用Guava的Joi ...