题目地址:HDU 4901

这题没想到最后竟然可以做出来。。

。。

这题用了两次DP,先从前往后求一次异或的。再从后往前求一次与运算的。

各自是

1:求异或的时候,定义二维数组huo[1000][1024],前者指第几位,后者是哈希的思想。若huo[x][y]=2则表示最右边的数为第x位时,异或值为y的出现了两次,须要再定义一个hash数组。来保存前面出现的全部情况。再找有多少位的时候,用hash数组中出现的全部的值与当前的第x位的数字进行异或。

2:求与的时候,定义二维数组yu[1000][1024]。同异或的差点儿相同,只是这里的位数是指从这位往后的全部的情况。而异或的是指必须包括该位。

因为与运算本身就是求的全部的情况,不用再定义hash数组。

3:然后从前往后開始匹配。仅仅要用huo[x]与yu[x+1]进行匹配就好了。假设两者出现了同样的异或值,那就将次数相乘。

终于的答案即是正确答案。

注意。在运算的过程中数组里的数会出现爆long long的情况。。所以须要每一步都要求余。。

(由于这个而错了好几次。。)

代码例如以下。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
__int64 huo[1003][1125], yu[1003][1125], a[1013], _hash[1003][1030];
const int mod=1e9+7;
int main()
{
__int64 t, n, i, j, k;
__int64 s;
scanf("%I64d",&t);
while(t--)
{
s=0;
memset(huo,0,sizeof(huo));
memset(yu,0,sizeof(yu));
scanf("%I64d",&n);
for(i=1; i<=n; i++)
{
scanf("%I64d",&a[i]);
}
memset(_hash,0,sizeof(_hash));
for(i=1; i<=n; i++)
{
for(j=0; j<=1024; j++)
{
if(_hash[i-1][j])
{
_hash[i][a[i]^j]+=_hash[i-1][j];
_hash[i][a[i]^j]%=mod;
huo[i][a[i]^j]+=_hash[i-1][j];
huo[i][a[i]^j]%=mod;
_hash[i][j]+=_hash[i-1][j];
_hash[i][j]%=mod;
}
}
_hash[i][a[i]]++;
huo[i][a[i]]++;
}
for(i=n; i>=1; i--)
{
for(j=0; j<=1024; j++)
{
if(yu[i+1][j])
{
yu[i][a[i]&j]+=yu[i+1][j];
yu[i][a[i]&j]%=mod;
yu[i][j]+=yu[i+1][j];
yu[i][j]%=mod;
}
}
yu[i][a[i]]++;
}
for(i=1; i<=n; i++)
{
for(j=0; j<=1024; j++)
{
if(huo[i][j]&&yu[i+1][j])
{
s=(s+huo[i][j]*yu[i+1][j])%mod;
}
}
}
printf("%I64d\n",s);
}
return 0;
}

HDU 4901(杭电多校训练#3 1005题)The Romantic Hero(DP)的更多相关文章

  1. HDU 4920(杭电多校训练#5 1010 题) Matrix multiplication(不知道该挂个什么帽子。。。)

    题目地址:pid=4920">HDU 4920 对这个题简直无语到极点. . .竟然O(n^3)的复杂度能过....方法有三.. 1:进行输入优化和输出优化. . (前提是你的输入优化 ...

  2. HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第 ...

  3. HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...

  4. HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可 ...

  5. 【单调栈】hdu 6319 杭电多校Problem A. Ascending Rating

    http://acm.hdu.edu.cn/showproblem.php?pid=6319 从后往前更新,维护一个递减单调栈(队列) 最近很多题都是单调栈... #define _CRT_SECUR ...

  6. HDU 4970(杭电多校#9 1011题)Killing Monsters(瞎搞)

    题目地址:HDU 4970 先进行预处理.在每一个炮塔的火力范围边界标记一个点. 然后对每一个点的伤害值扫一遍就能算出来. 然后在算出每一个点到终点的总伤害值,并保存下来,也是扫一遍就可以. 最后在询 ...

  7. HDU 4968(杭电多校#9 1009题)Improving the GPA (瞎搞)

    题目地址:HDU 4968 这题的做法是全部学科的学分情况枚举,然后推断在这样的情况下是否会符合平均分. 直接暴力枚举就可以. 代码例如以下: #include <cstring> #in ...

  8. [2019杭电多校第一场][hdu6583]Typewriter(后缀自动机&&dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6583 大致题意是说可以花费p在字符串后添加一个任意字符,或者花费q在字符串后添加一个当前字符串的子串. ...

  9. 2018杭电多校第三场1003(状态压缩DP)

    #include<bits/stdc++.h>using namespace std;const int mod =1e9+7;int dp[1<<10];int cnt[1& ...

随机推荐

  1. 关于js效果不提示就执行了刷新(解决 在h-ui框架中)

    parent.layer.msg('保存成功!<script>setTimeout("window.location.reload();",1100);<\/sc ...

  2. 那些年被我坑过的Python——邂逅与初识(第一章)

    第一问:为什么学习Python? 虚妖说:为了还债,还技术债,很早接触编程,却一直徘徊,也码了很多代码,却从未真真学会编程! 第二问:什么是Python 是一种以简洁.优雅著称的解释型.动态.强类型的 ...

  3. HIVE:用外连接替代子查询

    由于hive也支持sql,很多人会把hql跟标准sql进行比较,甚至有的时候会直接套用.hive不支持事务也不支持索引,更不支持追加写,但是对于一般的sql都是能够支持的.但是对于一些子查询确实无法支 ...

  4. Ubuntu启动错误Checking Battery State的处理

    一.问题描述 二.处理方法 方法一: 按下 ctrl + alt + F1,进入终端,使用管理员权限执行下列代码 sudo rm /etc/X11/xorg.conf sudo reboot 方法二: ...

  5. 超实用,你get了吗?再也不怕本地文件更新到环境用Linux命令重启服务器了。。。

    来公司这么久,写过不少代码,可是一碰见关于Linux命令操作的马上绕过,每次都是嚷嚷同事过来帮我替换文件,重启服务器,一直害怕接触命令的我一次一次不嫌麻烦,哈哈.有没有醉了?其实我一直都知道操作不难, ...

  6. C#转义字符总结

    转义字符 \·一种特殊的字符常量:·以反斜线"\"开头,后跟一个或几个字符.·具有特定的含义,不同于字符原有的意义,故称“转义”字符.·主要用来表示那些用一般字符不便于表示的控制代 ...

  7. The Model Complexity Myth

    The Model Complexity Myth (or, Yes You Can Fit Models With More Parameters Than Data Points) An oft- ...

  8. Matlab读取cifar10 train_quick.sh输出txt中信息

    感谢 网友 Vagrant的提醒.之前 一直就看个最后的accuracy.这个应该并不靠谱.最好把说有的信息都看一下.而一个一个看.根本记不住.只能把数据读取在图片中显示一下,才比较直观. 本文就是读 ...

  9. js backbone

    http://www.the5fire.com/backbone-js-tutorials-pdf-download.html http://www.infoq.com/cn/articles/mob ...

  10. Android的系统架构

    转自Android的系统架构 从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层.应用程序框架层.系统运行库层以及Linux内核层,分别介绍如下:     1)应用程序层 ...