题目地址: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. css字体大小设置em与rem的区别

    em 单位em是相对于父元素的,如果父元素没有设置字体大小,那就会追溯到body. 比如  如果我在box_text的父元素box加了一个字体大小   那么body的8px就会被box_text的父元 ...

  2. 我的接口框架---框架函数文件common.php

    <?php defined('JDHU') OR die('no allow access'); /** * 加载配置文件 */ function &get_config($replac ...

  3. 【python】【转】 for 循环一列

    Python for in循环 来源 http://c.biancheng.net/cpp/html/1822.html   for..in语句是另一个循环语句,它迭代一个对象的序列,例如经历序列中的 ...

  4. activity学习(1) 生命周期理解

    可以忽略onWindowFocusChanged.onSaveInstanceState.onRestoreInstanceState几个事件,这几个事件官网中的生命周期里面没有提到.忽略掉这几个方法 ...

  5. L1、L2范式及稀疏性约束

    L1.L2范式及稀疏性约束 假设需要求解的目标函数为: E(x) = f(x) + r(x) 其中f(x)为损失函数,用来评价模型训练损失,必须是任意的可微凸函数,r(x)为规范化约束因子,用来对模型 ...

  6. 升级 Java 编程规范的6个约定

    作为 Java 开发人员,我们会遵循一系列的编码风格和开发习惯.习惯使然是一方面,另一方面,我们也从不停下脚步质疑这些习惯.一段时间以后,笔者养成了一些不同于常人的编码风格和开发习惯.当第一次了解到这 ...

  7. codeforces C. Jzzhu and Chocolate

    http://codeforces.com/contest/450/problem/C 题意:一个n×m的矩形,然后可以通过横着切竖着切,求切完k次之后最小矩形面积的最大值. 思路:设k1为横着切的次 ...

  8. Android 使用HttpClient方式提交GET请求

    public void httpClientGet(View view) { final String username = usernameEditText.getText().toString() ...

  9. 双缓冲技术(Double Buffering)(1、简介和源代码部分)

    这一节实在是有些长,翻译完后统计了一下,快到2w字了.考虑到阅读的方便和网络的速度,打算把这节分为5个部分,第一部分为双缓冲技术的一个 简介和所有的代码,如果能够看懂代码,不用看译文也就可以了.第二部 ...

  10. hadoop-2.0.0-cdh4.2.1源码编译总结

    经过一个星期多的努力,这两个包的编译工作总算告一段落. 首先看一下这一篇文章: 在eclipse下编译hadoop2.0源码 http://www.cnblogs.com/meibenjin/arch ...