【BZOJ3866】The Romantic Hero

题意:一个序列,从中选取两个子序列S和T,满足S中所有元素都在T左边,并且S中所有数的xor和=T中所有数的and和,求方案数。n<=1000,ai<1024

题解:用s[i][j]表示从1-i中选出一些数,最后一个数是i,xor和为j的方案数。转移时用前缀和优化即可。用t[i][j]表示从i-n中选出一些数,最左边的数是i,and和为j的方案数,转移同理。计算答案的时候,用t[i][j]*s[1...i-1][j]即可。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int P=1000000007;
typedef long long ll;
int n;
ll ans;
int ss[1010][1050],s[1050],t[1050],st[1010][1050],v[1010];
inline int rd()
{int ret=0,f=1;   char gc=getchar();while(gc<'0'||gc>'9')  {if(gc=='-')f=-f;  gc=getchar();}while(gc>='0'&&gc<='9')  ret=ret*10+gc-'0',gc=getchar();return ret*f;
}
void work()
{n=rd(),ans=0;int i,j;for(i=1;i<=n;i++)    v[i]=rd();memset(ss,0,sizeof(ss)),memset(st,0,sizeof(st));for(i=1;i<=n;i++){memset(s,0,sizeof(s)),s[v[i]]=1;for(j=0;j<1024;j++)  s[j^v[i]]=(s[j^v[i]]+ss[i-1][j])%P;for(j=0;j<1024;j++)  ss[i][j]=(ss[i-1][j]+s[j])%P;}for(i=n;i>=1;i--){memset(t,0,sizeof(t)),t[v[i]]=1;for(j=0;j<1024;j++)   t[j&v[i]]=(t[j&v[i]]+st[i+1][j])%P;for(j=0;j<1024;j++) ans=(ans+(ll)ss[i-1][j]*t[j])%P,st[i][j]=(st[i+1][j]+t[j])%P;}printf("%lld\n",ans);
}
int main()
{int T=rd();while(T--) work();return 0;
}//2 3 1 2 3 4 1 2 3 3

转载于:https://www.cnblogs.com/CQzhangyu/p/7501166.html

【BZOJ3866】The Romantic Hero DP相关推荐

  1. 【bzoj3866】The Romantic Hero dp

    题目描述 给你n个数,从中选出两个不相交非空集合S和T,使得S中的每一个元素都在T集合的前面,并且S集合中的所有数的亦或等于T集合中的所有数的与,求方案数 mod 10^9+7. 输入 The fir ...

  2. 【题解】284E. Coin Troubles(dp+图论建模)

    [题解]284E. Coin Troubles(dp+图论建模) 题意就是要你跑一个完全背包,但是要求背包的方案中有个数相对大小的限制 考虑一个\(c_i<c_j\)的限制,就是一个\(c_i\ ...

  3. 【BZOJ4254】Aerial Tramway 树形DP

    [BZOJ4254]Aerial Tramway 题意:给你一座山上n点的坐标,让你在山里建m条缆车,要求缆车两端的高度必须相等,且中间经过的点的高度都小于缆车的高度.并且不能存在一个点位于至少k条缆 ...

  4. 【HDU】3271 SNIBB 数位DP

    传送门:[HDU]3271 SNIBB 题目分析:第一问直接求,第二问就二分.水题. 代码如下: #include <cmath> #include <cstdio> #inc ...

  5. 【CF582E】Boolean Function 树形DP+FWT

    [CF582E]Boolean Function 题意:给你一个长度为n的表达式,其中未知数有A,B,C,D和?,运算有&和|和?(表达式中用括号确定了唯一的运算顺序).?代表A,B,C,D或 ...

  6. 【BZOJ4660】Crazy Rabbit 结论+DP

    [BZOJ4660]Crazy Rabbit Description 兔子们决定在自己的城堡里安排一些士兵进行防守.给出 n 个点的坐标,和城堡里一个圆心在原点的圆形的障碍,兔子们希望从中选出 k 个 ...

  7. 【动态规划】P1220:区间dp:关路灯

    关掉区间[i,j]内的灯且结束时在左面(第i盏灯最后一个关掉),这个状态可由两个状态转移过来: (1)关掉区间[i+1,j]的灯且结束时在i+1 f[i+1][j][0]+d[i,i+1]*p(  p ...

  8. 【loj6342】跳一跳 期望dp

    题目描述 一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一.求从 $1$ 跳到 $n$ 的期望步数. $n\le 10^7$ . 题解 期望dp傻逼题 ...

  9. 【HDU4734】F(x) 数位DP

    题目描述 For a decimal number x with n digits (A[n]A[n-1]A[n-2] - A[2]A[1]), we define its weight as F(x ...

最新文章

  1. 51nod 1270 数组的最大代价
  2. linux kernel makefile analysis
  3. Google 超分辨率技术 RAISR:模糊图片瞬间变清晰,运算速度快十倍
  4. C语言用指针求两个矩阵的差,求破C语言用指针和函数求转置矩阵
  5. php接口调用实例源代码,小蚂蚁学习APP接口开发(7)—— APP接口实例——读取缓存方式开发APP接口的代码案例...
  6. python创建一个类初始化两个变量name、age_Python小白入门:第八讲||类
  7. java.lang.IllegalStateException: Calling [asyncError()] is not valid for a request with Async state
  8. ruby html解析器
  9. 解决win7下nodejs安装运行报错:Node.js is only supported on Windows 8.1, Windows Server 2012 R2... 之不支持高版本问题
  10. java小球碰撞实验报告_20155317 《Java程序设计》实验五网络编程与安全实验报告...
  11. 用VB轻松调用其他程序
  12. 最大最小标准化 数值_分享丨实验数据标准化处理方法
  13. C++ 输出日志到 DbgView
  14. pic单片机中断服务c语言程序,PIC 中断 服务程序
  15. 【C++】【记录自己的自学过程】用string简单的写一个拼字小游戏,只需要掌握string find方法即可。
  16. php final这个关键词代表什么,php中final关键字用法分析
  17. Css3中align-content,css align-content属性怎么用
  18. songtest 歌曲下载 器
  19. 小程序和钉钉发版后老版缓存的问题调研
  20. HDU 6148 Valley Numer (数位DP)题解

热门文章

  1. 做好MSSQL保卫战之xp_cmdshell
  2. 用设计模式去掉没必要的状态变量 —— 状态模式
  3. Python库安装相关问题
  4. Flink中MapFunction以及其他各种xxxFunction在intellij中的用法和规律
  5. 一键启动Zookeeper集群
  6. No ExecutorFactory found to execute the application.
  7. java.lang.NumberFormatException: For input string: “xxxx.“
  8. 数据建模中的大坑判断
  9. dependencies.dependency.version' for org.apache.commons:commons-math3:jar is missing
  10. 图解比较李航书上的viterbi算法和dijistra算法