CF1152F Neko Rules the Catniverse(状压 DP)

CF1152F Neko Rules the Catniverse

给定参数 \(n,k,m\),你需要求有多少个大小为 \(k\) 的序列 \(a\) 满足如下三个条件:

  1. 任意两个元素其权值不同。
  2. 对于任意 \(i\) 满足 \(1\le i\le k\)\(1\le a_i\le n\)
  3. 对于任意 \(i\) 满足 \(2\le i\le k\)\(a_i\le a_{i-1}+m\)

答案对 \(10^9+7\) 取模。

\(1\le n\le 10^9\)\(1\le k\le \min(n,12)\)\(1\le m\le 4\)

一眼根本没有思路,即使知道是状压也不知道如何设状态。。

\(\bigstar\texttt{Hint}\):按照位置信息的 DP 走不通,发现题目所给的是关于值域上的限制,考虑根据值域 DP。

状态怎么假设?由于有 \(n\) 总范围的限制,需要一个最大值 \(i\)。总共需要放置 \(k\) 个数,那么需要记录已经放置的数的个数。转移的时候,放入新的数 \(i\),可以放在 \(\ge i-m\) 的数的后面或者最开头的位置,所以要记录 \(\ge i-m\) 的数有哪些已经出现过了。

这样就合理推出了 DP 状态:\(f_{i,j,s}\) 表示当前放置最大值为 \(i\),已经在 \([1,i]\) 中选择了 \(j\) 个放在数列中,其中 \(\ge i-m\) 的数的选择情况为 \(s\)

转移分为 \(i+1\) 选择或不选择两种情况:

  • 选择 \(i+1\)

    \[f_{i+1,j+1,(2\times s)\&All|1}\leftarrow f_{i,j,s}\times (\text{popcount}(s)+1) \]
  • 不选择 \(i+1\)

    \[f_{i+1,j,(2\times s)\&All}\leftarrow f_{i,j,s} \]

且上面的转移方程可以写成矩阵的形式,边长为 \(k\times 2^m\),则总复杂度为 \(\mathcal{O(k^38^m\log n)}\)

#define Maxsta 208
#define mod 1000000007
int n,K,m,lim,All,pr;
struct Matrix
{int f[Maxsta][Maxsta];Matrix(){ memset(f,0,sizeof(f)); }inline Matrix friend operator * (Matrix x,Matrix y){Matrix ret;for(int i=0;i<lim;i++) for(int j=0;j<lim;j++) for(int k=0;k<lim;k++)ret.f[i][j]=(ret.f[i][j]+1ll*x.f[i][k]*y.f[k][j]%mod)%mod;return ret;}inline Matrix friend operator + (Matrix x,Matrix y){Matrix ret;for(int j=0;j<lim;j++) for(int k=0;k<lim;k++)ret.f[0][j]=(ret.f[0][j]+1ll*x.f[0][k]*y.f[k][j]%mod)%mod;return ret;}
};
Matrix trans,ans;
int main()
{n=rd(),K=rd(),m=rd(),All=1<<m,lim=(K+1)*All;ans.f[0][0]=1;for(int j=0;j<=K;j++) for(int s=0;s<All;s++){int cur=j*All+s,nex;if(j<K){nex=(j+1)*All+(((s<<1)&(All-1))|1);trans.f[cur][nex]=__builtin_popcount(s)+1;}nex=j*All+((s<<1)&(All-1));trans.f[cur][nex]=1;}for(;n;n>>=1,trans=trans*trans) if(n&1) ans=ans+trans;for(int s=0;s<All;s++) pr=(pr+ans.f[0][K*All+s])%mod;printf("%d\n",pr);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core2.2 多用户验证和授权

asp.net core2.2 用户验证 和授权有很详细和特贴心的介绍&#xff0c;我感兴趣的主要是这两篇&#xff1a;cookie身份验证基于角色的授权我的项目有两类用户&#xff1a;微信公众号用户&#xff0c;用户名为公众号的openid企业微信的用户&#xff0c;用户名为企业微信的userid每…

P1494 [国家集训队]小Z的袜子

P1494 [国家集训队]小Z的袜子 题意&#xff1a; 有一个长度为 n 的序列c[i] 。现在给出 m个询问&#xff0c;每次给出两个数l,r &#xff0c;从编号在 l 到 r 之间的数中随机选出两个不同的数&#xff0c;求两个数相等的概率。 题解&#xff1a; 很明显&#xff0c;莫队算法…

CSP2020洛谷P7076:动物园(位运算)

你知道它很水&#xff0c;但你就是切不掉它 解析 一直卡85&#xff01;&#xff01; 原因&#xff1a;最后判断的循环应该从0到k-1而不是从1到k&#xff01; 啊啊啊一定要小心啊qwq 说实话这个分都算是好的&#xff0c;这种bug爆大分一点招没有 还有一个问题是对于ans64爆unsi…

一文带你快速读懂.NET CLI

dotnet cli 是 .Net Core 功能中最有用的特性之一。在这篇文章里&#xff0c;我们将介绍几个.Net OSS 工具是如何使用 dotnet cli&#xff0c;并介绍如何在日常开发中使用新的 cli 工具。正文关键要点dotnet cli 使得基于. Net 项目的自动化和脚本编写变得非常简单&#xff0c;…

[POJ 3164]Command Network(最小树形图,朱刘算法)

文章目录titlesolutioncodetitle solution 读完翻译后&#xff0c;很明显就是个朱刘算法的板子题 最小树形图&#xff0c;就是给出一个带权有向图 从中指定一个特殊的结点 root 求一棵以 root 为根的有向生成树 T&#xff0c;且使得 T 中所有边权值最小 简单来说&#xff0c…

CF1553H-XOR and Distance【dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF1553H 题目大意 给出nnn个在[0,2n)[0,2^n)[0,2n)范围内的数字序列aaa。 对于每个x∈[0,2n)x\in[0,2^n)x∈[0,2n)求 min⁡i≠j∣aixorx−ajxorx∣\min_{i\neq j}\ |a_i\ xor\ x-a_j\ xor\ x|i​jmin​ ∣ai​ xor x−aj​…

同余最短路

主要内容 形如&#xff1a; 设问 \(1\) &#xff1a;给定 \(n\) 个整数&#xff0c;求这 \(n\) 个整数在 \(h(h\le2^{63}-1)\) 范围内 能拼凑出多少的其他整数( 个整数可以重复取) 。 设问 \(2\) &#xff1a;给定 \(n\) 个整数&#xff0c;求这 \(n\) 个整数 不能拼凑出的最小…

SP10707 COT2 - Count on a tree II

SP10707 COT2 - Count on a tree II 题意&#xff1a; 给定 n 个结点的树&#xff0c;每个结点有一种颜色。 m 次询问&#xff0c;每次询问给出 u,v&#xff0c;回答 u,v 之间的路径上的结点的不同颜色数。 1< n < 4*10^4 1< m < 10^5 题解&#xff1a; 树上…

[CQOI2018]异或序列

[CQOI2018]异或序列 题意&#xff1a; 给定1个整数K&#xff0c;离线询问[l,r]中有多少子区间xor和K。 题解&#xff1a; 异或有个重要的性质&#xff1a;它的逆运算就是自身 我们维护该数列的前缀异或和a[x],表示1到x的区间异或和&#xff0c;这样问题就变成了在区间[l-1,…

ASP.NET Core 3.0:将会拥有更少的依赖

在ASP.NET Core项目中&#xff0c;我们使用一个叫做Microsoft.AspNetCore.App的综合包。它也被称为ASP.NET Core Shared Framework&#xff0c;在ASP.NET Core Shared Framework之中包含了很多依赖项&#xff0c;它能满足一般应用的需求。但是如果你查看它的依赖项&#xff0c;…

CSP2020洛谷P7077:函数调用

解析 没做出来… qwq 自己只能想到拓扑开vector把每个函数搞成一个奇怪的加法标记和乘法标记的结合 极限数据卡一卡还是nm的 得分纯玄学qwq 本题的关键是乘法相当于把函数调用多次 这样就可以利用和全是加法类似的策略拓扑统计每个函数的调用次数 使问题得以解决 要注意部分…

CF1616H Keep XOR Low(Trie 树上 DP)

CF1616H Keep XOR Low 给你 \(n\) 个整数 \(a_1,a_2,\cdots,a_n\) 和一个整数 \(x\)。 你需要求出 \(\{1,2,\cdots,n\}\) 的一个子集 \(S\)&#xff0c;满足 \(S\) 中任意两个不同的元素 \(i,j\)&#xff0c;满足 \(a_i~{\rm xor}~a_j\le x\)。 求选取 \(S\) 的方案数&#xff…

[UVA - 11865]Stream My Contest(最小树形图+朱刘算法)

本题过于简单&#xff0c;朱刘算法模板题&#xff0c;考虑二分一下带宽即可titlecodetitle code #include <cstdio> #include <cstring> #include <iostream> using namespace std; #define MAXN 65 #define MAXM 100005 #define int long long #define in…

CSP2021NOIP2021游记

CSP Day -? 初赛 初赛考前没怎么复习&#xff0c;反倒是理直气壮的翘了一周晚修&#xff08;虽然后面就一直翘了&#xff09;。 开考之后才发现要拿那几张纸&#xff0c;监考让我考完再出去拿。 选择题很简单&#xff0c;没有啥犹豫的写完了&#xff0c;第一道读程序写结果好…

P3226 [HNOI2012]集合选数(状压 DP)

P3226 [HNOI2012]集合选数 要求选出集合 \(S\) 满足如果 \(x\) 选择了&#xff0c;\(2x\) 和 \(3x\) 都不能选择。 求 \(\{1,2,\dots,n\}\) 的符合要求的子集数量。 \(n\le 10^5\)。 发现对所有除去 \(2,3\) 因子后不同的数&#xff0c;他们之间没有关联&#xff0c;完全可以分…

微软上线Try .NET,支持在浏览器运行C#代码

微软Try .NET项目近期上线&#xff0c;这一项目允许用户通过浏览器运行和编写C#代码&#xff0c;同时还支持完整的代码提示。用户可以通过访问这一项目官网&#xff08;点此进入&#xff09;对Try .NET这一项目进行简单了解。该项目允许开发人员在浏览器中运行和编辑C#代码片段…

第46届ICPC亚洲区域赛(沈阳)L-Perfect Matchings【dp,组合数学】

正题 题目链接:https://ac.nowcoder.com/acm/contest/24346/L 题目大意 有一张2n2n2n个点的完全图&#xff0c;在上面删除一棵生成树&#xff0c;然后求这张图的完全匹配方案数。 1≤n≤20001\leq n\leq 20001≤n≤2000 解题思路 考虑容斥&#xff0c;可以dpdpdp出fi,j,0/1f…

CSP2019洛谷P5666:树的重心

解析 毒题 细节有亿点点多 我一开始的思路是没有问题的 尝试统计有多少种方案能砍出大小在一个区间的子树、 当时的想法是线段树合并 但是这个玩意在需要保留原树的情况下空间复杂度炸没了… 因为我垃圾的实现一个dfs里面就玩了七遍merge函数… 空间常数飞起 然后分数就和暴力…

[LOJ]体育成绩统计 / Score (无脑模拟,没有脑子,就是上!)

题目 好久没敲过恶心的模拟题了&#xff0c;莫名有点怀念是什么鬼&#xff0c;我还记得我的zamjena 没啥想说的&#xff0c;这道题就是没智商有码力的 纯粹是纪念一下今天上午直接肝了的两个半小时&#xff0c;真的一点思维都不需要有&#xff0c;直接上&#xff01;&#xff0…

P7137 [THUPC2021 初赛] 切切糕(博弈 概率)

P7137 [THUPC2021 初赛] 切切糕 -> 双倍经验&#xff1a;Game on Sum (Hard Version) 有 \(n\) 块方蛋糕&#xff0c;绝顶聪明的 Sight 和 Sirrel 决定将每块蛋糕都分成两块各自品尝。Sight 会依次将每块蛋糕分成两块&#xff0c;而 Sirrel 有 \(m\) 次优先选择权。 对于 \(…