「SDOI2016」储能表(数位dp)

神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\)

\(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 \(m\) 是否到达上界 \(k\) 是否到达下界。我用一个 \(pair\) 存,\(first\) 记录方案数,\(second\) 记录所有的和。

\(ans=(P.S-k*P.F)\%mod\)

那么我们每次枚举该位为 \(0/1\) 就可以转移了,逐位计算贡献。

\(Code\ Below:\)

#include <bits/stdc++.h>
#define ll long long
#define pll pair<ll,ll>
#define mp make_pair
#define F first
#define S second
using namespace std;
ll n,m,k,mod;pll f[70][2][2][2];
bool vis[70][2][2][2];pll dfs(int len,bool N,bool M,bool K){if(len<0) return mp(1,0);if(vis[len][N][M][K]) return f[len][N][M][K];vis[len][N][M][K]=1;pll ret=mp(0,0),P;bool lim_n=N?(n>>len)&1:1,lim_m=M?(m>>len)&1:1,lim_k=K?(k>>len)&1:1;for(int i=0;i<=lim_n;i++)   for(int j=0;j<=lim_m;j++){if(K&&(i^j)<lim_k) continue;P=dfs(len-1,N&&i==lim_n,M&&j==lim_m,K&&(i^j)==lim_k);ret.F=(ret.F+P.F)%mod;ret.S=(ret.S+P.S+(i^j)*(1ll<<len)%mod*P.F)%mod;}return f[len][N][M][K]=ret;
}inline void solve(){memset(f,0,sizeof(f));memset(vis,0,sizeof(vis));scanf("%lld%lld%lld%lld",&n,&m,&k,&mod);n--;m--;ll N=n,M=m,K=k;int Max=0,now=0;while(N) N>>=1,now++;Max=max(Max,now);now=0;while(M) M>>=1,now++;Max=max(Max,now);now=0;while(K) K>>=1,now++;Max=max(Max,now);now=0;pll P=dfs(Max-1,1,1,1);printf("%lld\n",(P.S-k%mod*P.F%mod+mod)%mod);
}int main()
{int T;scanf("%d",&T);while(T--) solve();return 0;
}

转载于:https://www.cnblogs.com/owencodeisking/p/10415133.html

「SDOI2016」储能表(数位dp)相关推荐

  1. 「SDOI2016」征途 题解

    「SDOI2016」征途 先浅浅复制一个方差 显然dp,可以搞一个

  2. 「CEOI2019」魔法树(DP+差分启发式合并)

    「CEOI2019」魔法树 description solution 设dpi,j:idp_{i,j}:idpi,j​:i子树在jjj时刻的最大果汁量,显然dpi,jdp_{i,j}dpi,j​在jj ...

  3. 【LOJ】#2066. 「SDOI2016」墙上的句子

    题解 我一直也不会网络流--orz 我们分析下这道题,显然和行列没啥关系,就是想给你n + m个串 那么我们对于非回文单词之外的单词,找到两两匹配的反转单词(即使另一个反转单词不会出现也要建出来) 具 ...

  4. LOJ 2546 「JSOI2018」潜入行动——树形DP

    题目:https://loj.ac/problem/2546 dp[ i ][ j ][ 0/1 ][ 0/1 ] 表示 i 子树,用 j 个点,是否用 i , i 是否被覆盖. 注意 s1<= ...

  5. 牛客 - 「火」皇家烈焰(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串表示扫雷游戏,其中: 0:这个格子没有烈焰,且其左右两个格子均没有烈焰 1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰 2:这个格子没有烈焰,且其左右 ...

  6. 「BSOJ2900」 Angry Birds - 线性Dp+搜索

    题目描述 绿猪们的势力越来越强大了,小鸟们正在筹划如何对付这群强大的东西. 可是绿猪们派来一位绿猪巫师洗清了所有前线鸟儿的记忆.现在,他们只记得他们各自的领导,但是这是一个自由散漫的团队,必须要找到他 ...

  7. bzoj4513 [Sdoi2016]储能表 dp

    这种数位dp第一次见.. 其实应该是利用位运算相互独立来避免后效性 一般的数位dp只有一个范围 这个题有三个范围.. 由于数位和整个数的大小没直接关系,所以就需要用状态记录 首先不合法的一定不转移,对 ...

  8. 数位dp(一)——Loj #10166. 「一本通 5.3 练习 1」数字游戏

    题目链接:https://loj.ac/problem/10166 题目大意 求区间[a,b]有多少数字满足数位加和%N等于0. 解题思路 看范围,很明显的数位dp.我们设定状态dp[pos][N][ ...

  9. loj2038「SHOI2015」超能粒子炮・改(卢卡斯的理解和延伸+数位dp)

    我们发现暴力+裸的卢卡斯可以骗到50分 所以就应该朝卢卡斯的方向去想. 卢卡斯是把n,k拆成两个p进制数进行统计的. 注意到如果在某一位ai>nia_i>n_iai​>ni​,a表示 ...

最新文章

  1. 二十二、插值查找算法
  2. #define 用法
  3. 变量和函数的定义和声明
  4. tf.lookup.StaticHashTable 用法
  5. Angular jasmine.expect单步调试
  6. sphinx 字符串转html,在Pycharm中获取Sphinx,以将我的文档字符串包含在生成的html中...
  7. 十荟团创始人发表内部信,公布下半场业务的全面升级规划
  8. 提高(微)服务安全的非完全攻略
  9. 百度地图KEY发布版SHA1和开发板SHA1如何获得
  10. Halcon软件和license下载
  11. 基本农田卫星地图查询_gps卫星信号模拟器如何gps信号
  12. PYTHON Fraction 分数处理
  13. Andriod 电池检测NTC电阻值的软件设定
  14. RoboMaster机甲大师裁判系统赛事引擎助手-RM Referee Aid
  15. 搭建gitblit服务器
  16. 阿里云服务器绑定域名,阿里云esc绑定域名,阿里云域名备案相关完整情况
  17. 高中数学怎么学好高中数学零基础怎么学
  18. Broadcasting 和 Element-Wise 操作
  19. 使用ADB“推送/提取/安装”文件进手机(华为U8825D)及错误举例
  20. 学计算机土味情话,计算机的土味情话

热门文章

  1. 两节点的最小公共祖先LCA
  2. MySQL 删除字段数据某关键字后的所有数据
  3. 输出注册信息javabean
  4. java导出word(带图片)
  5. Project Chameleon Work In Progress 11
  6. 23 | 基础篇:Linux 文件系统是怎么工作的?
  7. python数据接口获取数据_python UI自动化实战记录二:请求接口数据并提取数据
  8. hadoop 传感器数据_hadoop为什么是大数据学习的核心技术?
  9. Linux 下的文件管理管理系统中的输出输入
  10. 问题 A: 青蛙约会(数学)