这种数位dp第一次见。。

其实应该是利用位运算相互独立来避免后效性

一般的数位dp只有一个范围 这个题有三个范围。。

由于数位和整个数的大小没直接关系,所以就需要用状态记录

首先不合法的一定不转移,对于n和m的限制 ,一位合法的话有可能出现后面无论如何都合法, 与后面的数不能小于剩下的数,由于比他大的都不合法了,所以剩下的一定是与n、m前面几位相同的

所以就设计状态1表示前面几位都与n/m/k相同  0表示不同且合法(即后面的就都合法了)

比较暴力的dp。

注意%p的时候k本身要%p。。

码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define ll long long
ll er[76],n,m,ans,K,p,f[76][2][2][2],i1,i2,g[76][2][2][2];
int T,i,j,k,l;
int main()
{er[0]=1;for(i=1;i<=63;i++)er[i]=er[i-1]*2;scanf("%d",&T);while(T--){ans=0;memset(f,0,sizeof(f));memset(g,0,sizeof(g));scanf("%lld",&n);n--;scanf("%lld",&m);m--;scanf("%lld",&K);    scanf("%lld",&p); f[63][1][1][1]=1;  for(i=62;i>=0;i--){for(j=0;j<=1;j++)for(k=0;k<=1;k++)for(l=0;l<=1;l++){for(i1=0;i1<=1;i1++)for(i2=0;i2<=1;i2++){int mbj,mbk,mbl;            if(j==1&&(!(n&er[i]))&&i1)    continue; //是0  if(k==1&&(!(m&er[i]))&&i2)    continue;   //是0if(l==1&&(K&er[i])&&(!(i1^i2)))continue;  //是1  if(j==1&&(!(n&er[i]))&&(!i1))mbj=1;if(k==1&&(!(m&er[i]))&&(!i2))mbk=1;if(l==1&&(!(K&er[i]))&&(!(i1^i2)))mbl=1;if(j==1&&(n&er[i])&&i1)mbj=1;if(k==1&&(m&er[i])&&i2)mbk=1;   if(l==1&&(K&er[i])&&(i1^i2))mbl=1;if(j==1&&(n&er[i])&&(!i1))mbj=0;if(k==1&&(m&er[i])&&(!i2))mbk=0;               if(l==1&&(!(K&er[i]))&&(i1^i2))mbl=0; if(j==0)mbj=0;if(k==0)mbk=0;if(l==0)mbl=0;f[i][mbj][mbk][mbl]+=f[i+1][j][k][l];f[i][mbj][mbk][mbl]%=p;g[i][mbj][mbk][mbl]+=((i1^i2)*er[i]%p*f[i+1][j][k][l]%p+g[i+1][j][k][l])%p;g[i][mbj][mbk][mbl]%=p;} }}
for(i=0;i<=1;i++)for(j=0;j<=1;j++)for(k=0;k<=1;k++)ans-=(f[0][i][j][k]*(K%p))%p,ans%=p,     ans+=g[0][i][j][k],ans%=p;
printf("%lld\n",(ans+p)%p);}
}

bzoj4513 [Sdoi2016]储能表 dp相关推荐

  1. bzoj千题计划277:bzoj4513: [Sdoi2016]储能表

    http://www.lydsy.com/JudgeOnline/problem.php?id=4513 f[i][0/1][0/1][0/1] 从高到低第i位,是否卡n的上限,是否卡m的上限,是否卡 ...

  2. [SDOI2016]储能表

    Description 有一个 n 行 m 列的表格,行从 0 到 n−1 编号,列从 0 到 m−1 编号.每个格子都储存着能量.最初,第 i 行第 j 列的格子储存着 (i xor j) 点能量. ...

  3. 「SDOI2016」储能表(数位dp)

    「SDOI2016」储能表(数位dp) 神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\) \(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 ...

  4. 打表+dp思维+博弈

    E. Sending a Sequence Over the Network 应该属于一个经典dp,可惜我没做出来... 思路:对于一个数字来说,它可以向左扩展,也可以向有扩展. 设计状态:f[i]表 ...

  5. 省选之前的未完成的计划(截至到省选)

    PLAN OF THE COMING HEOI good problems: -bzoj4823:[Cqoi2017]老C的方块 [*] -bzoj3171:[Tjoi2013]循环格 [*] -bz ...

  6. 简单暴力到dp的优化(入门篇)

    上篇,我们提到,遇到问题,首先根据定义写出笨方法,找出依赖关系(有些题这一步就不太简单,要自己归纳关系),然后进行优化,下面,我们通过几道此方面的经典的,较为简单的二维题目进行讲解. 开始根据题来说明 ...

  7. LeetCode 64. 最小路径和(DP)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示 ...

  8. 蓝桥杯 算法训练 Cowboys By Assassin dp+字符串操作

    问题描述一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人.正如很多西部片那样,在这一刻,绳命是入刺的不可惜--对峙的场 ...

  9. 算法训练 Cowboys(DP)

    问题描述 一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人.正如很多西部片那样,在这一刻,绳命是入刺的不可惜--对峙的 ...

最新文章

  1. 一文概览图卷积网络基本结构和最新进展(附视频代码)
  2. 定位的坐标原点HTML,html 定位
  3. IScroll5中文API整理,用法与参考
  4. matplotlib绘图相关
  5. servlet与jsp面试题
  6. Android-S模拟器
  7. 1156 Sexy Primes (20 point(s)) PAT 素数
  8. 基于Excel模板导出——ExcelTemplate
  9. 教你如何快速提取视频文案
  10. CWnd和HWND的区别
  11. Neo4j构建目标知识图谱
  12. Element select表单必填验证
  13. 【正点原子FPGA连载】第十二章呼吸灯实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
  14. 架构设计:系统存储(21)——图片服务器:详细设计(1)
  15. java字符串Emoji表情的处理
  16. LINUX目錄配置|Directory-Configuration-In-Linux
  17. Oracle Datapump实验
  18. 京东商品主图定时替换,90%卖家这样做
  19. 分享面经与面试资料-四面阿里终于如愿拿到P7级offer【Java岗】
  20. Cracking the Interview 读书笔记 -- Java

热门文章

  1. 风变python小课离线版_Python是个什么鬼?为什么医学生朋友圈里都是它!
  2. Hadoop完全分布式安装
  3. Think in Java第四版 读书笔记9第15章 泛型
  4. EDGE浏览器配合阿呆喵设置广告过滤
  5. mybatis萌新基础
  6. day29 java 的IO流(2)
  7. day8 java的静态与实例
  8. Java输入n个无序的整数,请编写程序,找出其中最大数所在的位置.请以以下三种情况运行你的程序.以便验证你的程序是否正确.(不得少于5个数)① 最大数在最前 ② 最大数在最后 ③ 最大
  9. python with关键字_完全理解Python关键字with与上下文管理器
  10. 列标题 如何删除gridcontrol_GridControl简单属性操作