HDU 4901(杭电多校训练#3 1005题)The Romantic Hero(DP)
题目地址: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)的更多相关文章
- HDU 4920(杭电多校训练#5 1010 题) Matrix multiplication(不知道该挂个什么帽子。。。)
题目地址:pid=4920">HDU 4920 对这个题简直无语到极点. . .竟然O(n^3)的复杂度能过....方法有三.. 1:进行输入优化和输出优化. . (前提是你的输入优化 ...
- HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第 ...
- HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...
- HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可 ...
- 【单调栈】hdu 6319 杭电多校Problem A. Ascending Rating
http://acm.hdu.edu.cn/showproblem.php?pid=6319 从后往前更新,维护一个递减单调栈(队列) 最近很多题都是单调栈... #define _CRT_SECUR ...
- HDU 4970(杭电多校#9 1011题)Killing Monsters(瞎搞)
题目地址:HDU 4970 先进行预处理.在每一个炮塔的火力范围边界标记一个点. 然后对每一个点的伤害值扫一遍就能算出来. 然后在算出每一个点到终点的总伤害值,并保存下来,也是扫一遍就可以. 最后在询 ...
- HDU 4968(杭电多校#9 1009题)Improving the GPA (瞎搞)
题目地址:HDU 4968 这题的做法是全部学科的学分情况枚举,然后推断在这样的情况下是否会符合平均分. 直接暴力枚举就可以. 代码例如以下: #include <cstring> #in ...
- [2019杭电多校第一场][hdu6583]Typewriter(后缀自动机&&dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6583 大致题意是说可以花费p在字符串后添加一个任意字符,或者花费q在字符串后添加一个当前字符串的子串. ...
- 2018杭电多校第三场1003(状态压缩DP)
#include<bits/stdc++.h>using namespace std;const int mod =1e9+7;int dp[1<<10];int cnt[1& ...
随机推荐
- JavaScript各种遍历方式详解
为了方便例子讲解,现有数组和json对象如下 var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular']; v ...
- ip输入框键入.或者合法数字自动选择下一个输入框效果
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...
- php时间选择器亲测可以自己修改
由于前端的离职 造成我需要自己去做后台页面 所以有一个要填写生日的我就用了这个时间选择器 <?php /** * Created by PhpStorm. * User: Administ ...
- 了解SOA是什么!
面向服务架构 面向服务的体系结构(service-oriented architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来 ...
- php的几个版本的区别?
1. VC6与VC9的区别:VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本.VC9版本是使用Visual Studio 200 ...
- PC和单片机通过MODBUS RTU通信
最近研究了一下MODBUS通信,在STC12C5A60S2单片机上实现了MODBUS协议的部分功能,方便上位机从单片机系统上获取数据,比如由单片机获取的温度.湿度.或者控制信号的状态等.有了MODBU ...
- Prince and Princess
hdu4685:http://acm.hdu.edu.cn/showproblem.php?pid=4685 题意:有n个王子和m个公主,每个王子都会喜欢若干个公主,也就是王子只跟自己喜欢的公主结婚公 ...
- windows下NGINX和PHP配合(FASTCGI)
昨天测试了TOMCAT,今天考查了NGINX. 按网上说的作,比较简单. http://www.cnblogs.com/huayangmeng/archive/2011/06/15/2081337.h ...
- Git标签管理
一般我们发布一个新版本到线上服务器时都会在版本库中打一个标签,这时就确定了某个版本将发布到线上.我们可以随时可以查看这个打标签的版本,也就 是说标签其实呢,就是版本库中一个快照.简单说标签就是指向某个 ...
- 利用rowid更新单表
SQL> create table test1(id int,name char(10)); Table created. begin for i in 1 .. 1000000 loop in ...