2014多校第四场1005 || HDU 4901 The Romantic Hero (DP)
题意 :给你一个数列,让你从中挑选一些数组成集合S,挑另外一些数组成集合T,要求是S中的每一个数在原序列中的下标要小于T中每一个数在原序列中下标。S中所有数按位异或后的值要与T中所有的数按位与的值相同,问能找出多少符合要求的组合。
思路 :比赛的时候有点没有头绪,后来二师兄想出了状态转移方程,YN又改了很多细节,最后才A的。总之是个别扭的DP。。。。。
一开始是 _xor[i][j^a[i]] += _xor[i-1][j] ;j 的下一个状态 就是异或上a[i],这个数组所代表的意思是,前 i 个数中选取某些数(必须包括 i )组成的集合按位异或得到j^a[i]
但是发现这样会重复,因为对于对于S和T的选取的元素,下标前后没有明显的界限,从前往后找与从后往前找,两厢重复。后来就重新设了一个数组去存以前的所有的值:
_xor[i][j^a[i]] += xort[i-1][j] ;
xort[i][j] = _xor[i][j] + xort[i-1][j] ;//这个表达式,代表这前 i 个中选取了某些数(必须选了 i )异或后的值为j的情况加上前 i -1个选某些值异或后的值为 j 。其实就是选与不选 i 的两种情况相加,组成的就是前 i 个中选取某些数异或出 j 所组成的情况,此时的 i 可选可不选。
//
#include <cstring>
#include <cstdio>
#include <iostream>
typedef long long LL ;
const long long mod = ;
using namespace std ; int a[] ;
LL _xor[][],xort[][],_and[][],andt[][] ; void Init()
{
memset(_xor,,sizeof(_xor)) ;
memset(xort,,sizeof(xort)) ;
memset(_and,,sizeof(_and)) ;
memset(andt,,sizeof(andt)) ;
memset(a,,sizeof(a)) ;
}
int main()
{
int T,n ;
cin >> T ;
while(T -- )
{
cin >> n ;
Init() ;
for(int i = ; i < n ; i++)
cin >> a[i] ;
_xor[][a[]] = xort[][a[]] = ;
for(int i = ; i < n ; i++)
{
for(int j = ; j < ; j ++)
{
_xor[i][j^a[i]] += xort[i-][j] ;
_xor[i][j^a[i]] %= mod ;
}
_xor[i][a[i]] ++ ;
for(int j = ; j < ; j++)
{
xort[i][j] = _xor[i][j] + xort[i-][j] ;
xort[i][j] %= mod ;
}
}
_and[n-][a[n-]] = andt[n-][a[n-]] = ;
for(int i = n- ; i >= ; i--)
{
for(int j = ; j < ; j++)
{
_and[i][j&a[i]] += andt[i+][j] ;
_and[i][j&a[i]] %= mod ;
}
_and[i][a[i]] ++ ;
for(int j = ; j < ; j++){
andt[i][j] = andt[i+][j] + _and[i][j] ;
andt[i][j] %= mod ;
}
}
LL ans = ;
for(int i = ; i < n- ; i++)
{
for(int j = ; j < ; j++)
{
ans += (_xor[i][j] * andt[i+][j]) % mod ;
ans %= mod ;
}
}
cout << ans << endl ;
}
return ;
}
2014多校第四场1005 || HDU 4901 The Romantic Hero (DP)的更多相关文章
- 2014多校第七场1005 || HDU 4939 Stupid Tower Defense (DP)
题目链接 题意 :长度n单位,从头走到尾,经过每个单位长度需要花费t秒,有三种塔: 红塔 :经过该塔所在单位时,每秒会受到x点伤害. 绿塔 : 经过该塔所在单位之后的每个单位长度时每秒都会经受y点伤害 ...
- 2014多校第六场 1005 || HDU 4925 Apple Tree
题目链接 题意 : 给你一块n×m的矩阵,每一个格子可以施肥或者是种苹果,种一颗苹果可以得到一个苹果,但是如果你在一个格子上施了肥,那么所有与该格子相邻(指上下左右)的有苹果树的地方最后得到的苹果是两 ...
- 2014多校第四场1006 || HDU 4902 Nice boat (线段树 区间更新)
题目链接 题意 : 给你n个初值,然后进行两种操作,第一种操作是将(L,R)这一区间上所有的数变成x,第二种操作是将(L,R)这一区间上所有大于x的数a[i]变成gcd(x,a[i]).输出最后n个数 ...
- 2014多校第三场1005 || HDU 4891 The Great Pan(模拟)
题目链接 题意 : 给你n行字符串,问你有多少种理解方式.有两大类的理解 (1){A|B|C|D|...}代表着理解方式可以是A,可以是B或C或者D. (2)$blah blah$,在$$这两个符号中 ...
- hdu 4901 The Romantic Hero (dp)
题目链接 题意:给一个数组a,从中选择一些元素,构成两个数组s, t,使s数组里的所有元素异或 等于 t数组里的所有元素 位于,求有多少种构成方式.要求s数组里 的所有的元素的下标 小于 t数组里的所 ...
- HDU 4901 The Romantic Hero
The Romantic Hero Time Limit: 3000MS Memory Limit: 131072KB 64bit IO Format: %I64d & %I64u D ...
- HDU 4901 The Romantic Hero(二维dp)
题目大意:给你n个数字,然后分成两份,前边的一份里面的元素进行异或,后面的一份里面的元素进行与.分的时候依照给的先后数序取数,后面的里面的全部的元素的下标一定比前面的大.问你有多上种放元素的方法能够使 ...
- HDU 4901 The Romantic Hero 题解——S.B.S.
The Romantic Hero Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- 2014多校第十场1004 || HDU 4974 A simple water problem
题目链接 题意 : n支队伍,每场两个队伍表演,有可能两个队伍都得一分,也可能其中一个队伍一分,也可能都是0分,每个队伍将参加的场次得到的分数加起来,给你每个队伍最终得分,让你计算至少表演了几场. 思 ...
随机推荐
- Swift 中使用Nimble 库进行单元测试
Nimble 从字面上看是 敏捷,灵活 的意思.Nimble 是一个库,一个 断言库.这个库一般用于单元测试.Xcode 6 为我们集成了 XCTest 单元测试库.在正式介绍 Nimble 之前,我 ...
- 52.ISE中的PLL时钟输入
在manaul mode中选择PLL PLL的输入时钟可以是全局时钟,也可以是普通IO引脚. 1.PLL的输入时钟是全局时钟的情况. pll_xx pll_xx ( .clkin ( clkin ), ...
- “psp”软件需求规约
1 系统概述 1.1 概述 该产品是基于软件开发的个人软件过程(personal software process)系统.基本信息有软件开发人员,项目经理,研发经理和管理层登录系统后根据各自的相应权限 ...
- PB建数据窗口的时候会报内存错误
同事碰到了这个问题,百度了一下,按照下边的方法解决了 ------解决方案--------------------我遇到过,是powerbuilder的注册表出问题了,找到注册表中HKEY_USER ...
- [shell基础]——read命令
read命令:在shell中主要用于读取输入.变量.文本 1. 接受标准输入(键盘)的输入,并将输入的数据赋值给设置的变量 [按回车键——表示输入完毕] [若输入的数据多于设置的变 ...
- graphicsMagick 文档
ImageMagick资料 ---------------------------------------------------------------------------- ImageMagi ...
- 安装配置tomcat
1.安装nginx 下载nginx-1.4.3 解压: tar zxvf nginx-1.4.3.tar.gz 编译安装: ./configure --prefix=/app/act/nginx/ng ...
- bzoj 2038 莫队算法
莫队算法,具体的可以看10年莫涛的论文. 大题思路就是假设对于区间l,r我们有了一个答案,那么对于区间l,r+1,我们 可以暴力的转移一个答案,那么对于区间l1,r1和区间l2,r2,需要暴力处理 的 ...
- 【BZOJ】【3676】【APIO2014】回文串
回文自动机/Manacher+SA 这道题可以用Manacher找出本质不同的回文串(令max增大的所有回文串),然后再用SA跑出来有多少相同. 还有一种做法就是回文自动机(Orz Hzwer)的裸题 ...
- 使用TCP协议的NAT穿透技术
一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基本上没有人会告诉你如何使用TCP协议去穿透(甚至有的人会直接告诉你TCP协议是无法实现穿透的).但是,众所周知的是,UDP是一个无连 ...