首页 > 其他分享 >H. Don't Blame Me

H. Don't Blame Me

时间:2024-06-13 21:21:36浏览次数:23  
标签:Me Don tem int Blame 按位 序列 dp mod

原题链接

题解

1.先想想能不能暴力?
发现好像不行,因为不知道哪些元素组合的按位与能恰好有k个1
2.观察数据范围,发现 \(a_i \leq 63\) 也就是说,按位与的结果最大不会大于63 ,即 6 位 1 ,这暗示着我们可能可以从这里入手,即遍历所有按位与的情况,然后判断每种有k个1的按位与,有几个子序列能达到
3.对于每种有k个1的按位与,如何得出有几个子序列能达到它呢?
这里就是状态的巧妙之处了
所有子序列 = \(\sum_{i=1}^{n} S_i\) 其中 \(S_i\) 是以 \(i\) 为结尾的子序列
设 \(dp[i][j]\) 有多少个结尾不大于 \(i\) 的子序列(前缀和的思想好像在dp里经常出现), 且其按位与能达到 j
则 \(dp[i][j\ \& \ a_i]=dp[i-1][j\ \& \ a_i]+dp[i-1][j]\)
即若已知前 \(i\) 个数,按位与能达到 \(j\) 和 \(a_i\ \&\ j\) 的子序列个数,那么前 \(i+1\) 个数,按位与能达到 \(a_i\ \&\ j\) 的子序列个数也已知

code

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int a[200005]={0};
int dp[200005][70]={0};
int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;
    cin>>t;
    while(t--)
    {
        int n,k;
        cin>>n>>k;

        for(int i=1;i<=n;i++) cin>>a[i];

        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<=63;j++) dp[i][j] = dp[i-1][j];
            for(int j=63;j>=0;j--)
            {
                dp[i][j & a[i]] = (dp[i][j & a[i]] + dp[i-1][j]) % mod;
            }
            dp[i][a[i]] = (dp[i][a[i]] + 1LL) % mod;
        }

        int ans=0;
        for(int i=63;i>=0;i--)
        {
            int cnt=0;
            int tem=i;
            while(tem)
            {
                cnt += (tem % 2LL);
                tem >>= 1LL;
            }
            if(cnt == k) ans = (ans + dp[n][i]) % mod;
        }
        cout << ans << endl;
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<=63;j++) dp[i][j]=0;
        }
    }
    return 0;
}

标签:Me,Don,tem,int,Blame,按位,序列,dp,mod
From: https://www.cnblogs.com/pure4knowledge/p/18246783

相关文章

  • zabbix 监控客户端进程Cpu && Mem
    目录zabbix监控客户端进程Cpu&&Mem进程Cpulinux环境下win10windows环境下zabbix监控客户端进程Cpu&&Mem有几台win10的机器,经常cpu过高导致服务不可用,但是不知道是哪个进程导致的。特地加个cpu监控进程的脚本,此外也会加linux系统的,详情请参考下面进程Cpulinux环境下对......
  • vulnhub - hackme1
    vulnhub-hackme1信息收集端口扫描详细扫描目录扫描跟漏洞探测没发现什么可用信息,除了登录还有一个uploads目录应该是进入后台之后才能使用web主页是个登录注册页面,爆了一下admin没进去,随便注册个账户登入SQL注入点击search按钮发现是个书本目录,这个结构很容易想到sql......
  • COSC2531 Programming Fundamentals
    Programming Fundamentals (COSC2531)FinalCodingChallengeAssessmentType Individual assessment (no group work).SubmitonlineviaCanvas/Assignments/FinalCodingChallenge.Marksareawardedperrubric(pleaseseetherubricon Canvas). Cla......
  • PreconditionNotMetError: The third-party dynamic library (cudnn64_8.dll) that Pa
    下载paddle的时候,运行importpaddleprint(paddle.__version__)paddle.utils.run_check()如题所示的错误如果cuda、cudnn、paddlepaddle-gpu的匹配版本都没有错的话可能是因为电脑没有显卡驱动在这里填上你的电脑信息会自动找到适合你电脑的显卡驱动官方驱动|NVIDIA例如我......
  • 记录两个群音视频开源框架LiveKit和mediasoup
    mediasoup: https://github.com/versatica/mediasoupliveKit: https://github.com/livekit/livekit 为开发者提供的实时视频、音频和数据传输解决方案LiveKit是一个开源项目,基于WebRTC提供可扩展的多用户会议功能。它旨在为您的应用构建实时视频、音频和数据交互能力提......
  • 【高光谱遥感分类论文解读1】Hyperspectral Image Classification Using Group-Aware
    目录一、论文基本信息二、研究背景三、研究方法1.GAHT总体框架2.GPE模块3.Transformer编码模块四、实验本文是博主对原论文的解读,仅代表博主个人观点,欢迎在评论区和我交流~其中,本博文中的图片和公式均来源于原论文,如需进一步了解,请查看原论文。一、论文基本信息......
  • Chrome使用回退,出现表单提交失败,ERR_CACHE_MISS问题
    是什么、为什么、怎么办"ERR_CACHE_MISS"错误通常发生在你使用浏览器的“返回”按钮时。这种错误与浏览器处理缓存数据的方式有关,特别是在处理表单和POST请求时。常见原因表单重新提交当你导航回包含表单提交的页面(通常是POST请求)时,Chrome可能会提示你重新提......
  • QMenu setStyleSheet样式设置
    要实现如图所示的菜单按钮,有默认,悬停,点击三种状态;发现用Qss统一设置样式的时候,按下状态无效;QMenu::item{background:rgb(77,77,77);font-family:MicrosoftYaHeiUI;font-size:14px;height:32px;color:rgba(255,255,255,0.7);}QMenu::item:pressed//无效{......
  • springboot Invalid bound statement (not found): com.elitel.xxx.dao.xxx 错误处
    如果这篇文章能给你带来帮助,不胜荣幸,如果有错误也请批评指正,一起学习,共同进步!今天给同事看了个问题,发现了这个问题,之前也遇见过,可是没有遇见这种情况,这次我记录一下。首先来说,造成这个错误的原因是什么。它是在SpringBoot应用程序中遇到“Invalidboundstatement(not......
  • jmeter做一个注册的脚本
    前置处理器:在请求之前做的操作在前置处理器里后置处理器:收到响应之后的操作在后置处理器里1、抓包获取注册接口   2、复制URL、参数等信息到jmeter  3、jmeter添加监听器-察看结果树运行脚本查看结果 啥意思没明白,反正脚本没成功,如果脚本成功响应数据应该是类......