首页 > 其他分享 >数位 DP

数位 DP

时间:2023-01-12 10:59:17浏览次数:37  
标签:limits int sum cin continue DP dp 数位

2023.1.9 省选模拟赛 I A

【题意】
给定 \(x,y\),求

\[\sum \limits_{i \in [0, 2^k - x)} \sum \limits_{j \in [y, 2^k)} [i \& j = 0] \times [(i+x) \& (j-y) = 0] \]

\(x,y \le 2^{200000}\),通过二进制方式给出。
【分析】
首先这个 \(j-y\) 不好处理。应该将其换成 \(j\),得到这样的比较清楚的柿子:

\[\sum \limits_{i \in [0, 2^k - x)} \sum \limits_{j \in [0, 2^k-y)} [i \& (j+y) = 0] \times [(i+x) \& j = 0] \]

然后我们考虑有加法的话,记录进位即可。令 \(dp_{i, 0/1, 0/1}\) 表示考虑到第 \(i\) 位,\(i+x,j+y\) 下一位分别有没有进位。枚举 \(i,j\) 的取值即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define f(i, a, b) for(int i = (a); i <= (b); i++)
#define cl(i, n) i.clear(),i.resize(n);
#define endl '\n'
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int inf = 1e9;
void cmax(int &x, int y) {if(x < y) x = y;}
void cmin(int &x, int y) {if(x > y) x = y;}
//调不出来给我对拍!
char x[200010],y[200010];
int dp[200010][2][2];
const int mod=1e9+7;
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
    //time_t start = clock();
    //think twice,code once.
    //think once,debug forever.
    int n;cin>>n;
    for(int i=n-1;i>=0;i--){cin>>x[i];x[i]-='0';}
    for(int i=n-1;i>=0;i--){cin>>y[i];y[i]-='0';}
    dp[0][0][0]=1;  //x这一维度向右平移
    f(d,0,n-1){
        f(i,0,1)f(j,0,1){
            //枚举i,j这一位的取值。
        //    if(i==1&&j==1)continue;
            f(k, 0, 1) f(l,0, 1) {
                //枚举上一位有没有往前进位。
                if((i+x[d]+k)&j)continue;
                if((j+y[d]+l)&i)continue;
                dp[d+1][(i+x[d]+k>=2?1:0)][(j+y[d]+l>=2?1:0)]+=dp[d][k][l];
                dp[d+1][(i+x[d]+k>=2?1:0)][(j+y[d]+l>=2?1:0)]%=mod;
            }
        }
    }
    cout<<dp[n][0][0]<<endl;
    //time_t finish = clock();
    //cout << "time used:" << (finish-start) * 1.0 / CLOCKS_PER_SEC <<"s"<< endl;
    return 0;
}

标签:limits,int,sum,cin,continue,DP,dp,数位
From: https://www.cnblogs.com/Zeardoe/p/17045789.html

相关文章

  • UDP
    UDPUDP是一种全双工通信协议。UDP协议首部中有一个16位的大长度.也就是说一个UDP能传输的报文长度是64K(包含UDP首部)。如果我们需要传输的数据超过64K,就需要在应用层......
  • JUC源码学习笔记5——1.5w字和你一起刨析线程池ThreadPoolExecutor源码,全网最细doge
    源码基于JDK8文章1.5w字,非常硬核系列文章目录和关于我一丶从多鱼外卖开始话说,王多鱼给好友胖子钱让其投资,希望亏得血本无归。胖子开了一个外卖店卖国宴,主打高端,外卖......
  • 单调队列优化DP
    今天学习了单调队列优化DP,其模型为:\[f_i=\min/\max_{L(i)\lej\leR(i)}\lbracekf_j+val(i,j)\rbrace\]其中\(L,R\)是具有单调性的函数,\(val(i,j)=h_1(i)+h_2(j)\),是分......
  • 偶数位(熟悉二进制)
    几天没写了,今天写一个简单的小题  这道题乍一看,有点没有头绪,但是仔细考虑,也不是毫无头绪.思路1:只要会十进制和二进制之间的转换,将十进制转二......
  • 力扣每日一题2023.1.11---2283. 判断一个数的数字计数是否等于数位的值
    现在还真成简单题重拳出击了。。。给你一个下标从0 开始长度为n 的字符串 num ,它只包含数字。如果对于每个 0<=i<n 的下标 i ,都满足数位 i 在num 中出......
  • 关于华普物联HP-ERS-T200串口服务器UDP 连接互联网服务器操作案例
    本案例使用“路由侠”模拟互联网服务器,使用“路由侠”生成的外网地址进行测试。   硬件连接 将HP-ERS-T200通过USB转RS232串口线连接到PC的USB口上,HP......
  • 关于华普物联HP-ERS-T200串口服务器UDP局域网通讯案例
    硬件连接两个HP-ERS-T200分别通过USB转RS232串口线连接到PC的USB口上,通过上位机设置参数,设置完参数后,将两个HP-ERS-T200通过网线直连。 电脑COM口号确认......
  • 理解wordpress中的taxonomy category与term
    最近接触了很多PHP的东西,也学到了很多新的,就想着也利用热乎的知识优化一下基于​​Wordpress​​的极风游官网。实际操作过程中,发现其实除了php的知识以外,wordpress也还是......
  • 【做题笔记】动态规划专题(DP)
    这里记录笔者这几天做的有关于dp的题目。树形dp#1P1122最大子树和题目链接:https://www.luogu.com.cn/problem/P1122题意:选出一个联通分量,使得联通分量的点的点权......
  • 基于单调性的 dp 优化
    决策单调性决策单调性一般用于最优性问题当中,即一个状态只能从一个最优的状态转移,该最优状态称之为最优点。决策单调性就是指最优点随dp转移单调移动。一般如果能够将......