博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4901 多校4 经典计数DP
阅读量:4455 次
发布时间:2019-06-07

本文共 1498 字,大约阅读时间需要 4 分钟。

RT

最近不想写博客,累积了一周多的题目,今天趁着周日放假,全部补上吧

dp[i][j]表示前i个数,操作后的值为j的总个数

注意取或不取,有种完全背包的意味。因为数字小于1024,所以异或的结果也绝对不会超过1024,在循环第二维的时候到1024就行了,不要循环多了,反而会错,循环多了 异或值会超,结果爆了数组,产生了奇怪的结果,一开始我就这么莫名其妙的错,还不知道是为什么,就是爆了数组 他也不会提醒你的

#include 
#include
#include
#include
#define LL __int64using namespace std;const LL M=1000000000+7;const int N=1050;const int maxn=1010;LL dp1[maxn][N];LL dp2[maxn][N];LL s1[maxn][N],s2[maxn][N];int A[maxn];int main(){ int t,n; scanf("%d",&t); while (t--) { scanf("%d",&n); for (int i=1;i<=n;i++){ scanf("%d",&A[i]); } for (int i=0;i<=n+1;i++){ for (int j=0;j<=N;j++){ dp1[i][j]=dp2[i][j]=0; s1[i][j]=s2[i][j]=0; } } dp1[0][0]=1; for (int i=1;i
=M) dp1[i][j]%=M; if (dp1[i][j^A[i]]>=M) dp1[i][j^A[i]]%=M; } for (int j=0;j<=1024;j++){ s1[i][j^A[i]]=dp1[i-1][j]; s1[i][j^A[i]]%=M; } } LL ans=0; for (int i=n;i>1;i--){ dp2[i][A[i]]=1; for (int j=1024;j>=0;j--){ dp2[i][j&A[i]]+=dp2[i+1][j]; dp2[i][j]+=dp2[i+1][j]; if (dp2[i][j&A[i]]>=M) dp2[i][j&A[i]]%=M; if (dp2[i][j]>=M) dp2[i][j]%=M; } } for (int i=1;i

 

转载于:https://www.cnblogs.com/kkrisen/p/3902750.html

你可能感兴趣的文章
【转载】OmniGraffle (二)基础绘图和模具
查看>>
一些提高开发效率的 Category
查看>>
拓扑排序基础题——排序
查看>>
搭建keepalived+mysql主从复制高可用
查看>>
假如你在每一个变化中看见崭新的自己
查看>>
转:iphone 申请证书
查看>>
Python就业方向
查看>>
一步步学习SPD2010--第二章节--处理SP网站(3)--创建网站层次架构
查看>>
TCP
查看>>
Excel常用函数大全
查看>>
团队-团队编程项目中国象棋-模块测试过程
查看>>
R-创建数据集-ch2
查看>>
10个经典的C语言面试基础算法及代码
查看>>
[概念] js的函数节流和throttle和debounce详解
查看>>
普通的java Ftp客户端的文件上传
查看>>
视图系统
查看>>
Palindromes _easy version
查看>>
vue 小记
查看>>
CURRICULUM VITAE
查看>>
菱形缓冲器电路
查看>>