【CF1152F】Neko Rules the Catniverse(动态规划)
【CF1152F】Neko Rules the Catniverse(动态规划)
题面
题解
我们先考虑一个需要扫一遍所有位置的做法。
那么状态一定是\(f[i]\)然后什么什么表示考虑到当前第\(i\)个位置的答案。
看看我们还需要记录什么,首先肯定要记录的是当前已经选了几个,所以多了一维\(j\)。
然后考虑现在这个能不能选。
首先如果这个元素放在某个元素之前,后面一定是合法的,因为当前位置一定是全局的最大值,所以只需要考虑它可以放在谁之前就行了。
而限制是\(x\le y+m\),那么我们暴力压状态记录前\(m\)个是否被选择。
那么首先这个元素放在第一个一定是可以的,然后这个元素如果不放在第一个就要放在某一个的后面,那么就只有可能放在最后\(m\)个存在元素的后面,那么判断一下就行啦。
然后发现转移是一模一样的,所以直接矩乘就行了。
#include<iostream>
#include<cstdio>
using namespace std;
#define MOD 1000000007
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int b[13][1<<4],bel[1<<4],n,K,m,N,ans;
struct Matrix
{
int s[210][210];
void clear(){for(int i=1;i<=N;++i)for(int j=1;j<=N;++j)s[i][j]=0;}
void init(){clear();for(int i=1;i<=N;++i)s[i][i]=1;}
int*operator[](int x){return s[x];}
}A,Tr;
Matrix operator*(Matrix &a,Matrix &b)
{
Matrix c;c.clear();
for(int i=1;i<=N;++i)
for(int j=1;j<=N;++j)
for(int k=1;k<=N;++k)
c[i][j]=(c[i][j]+1ll*a[i][k]*b[k][j])%MOD;
return c;
}
int main()
{
n=read();K=read();m=read();
for(int i=1;i<1<<m;++i)bel[i]=bel[i>>1]+(i&1);
for(int j=0;j<=K;++j)
for(int S=0;S<1<<m;++S)b[j][S]=++N;
for(int j=0;j<=K;++j)
for(int S=0;S<1<<m;++S)
{
int T=(S<<1)&((1<<m)-1);
add(Tr[b[j][S]][b[j][T]],1);
if(j<K)add(Tr[b[j][S]][b[j+1][T|1]],bel[S]+1);
}
A[1][1]=1;
while(n){if(n&1)A=A*Tr;Tr=Tr*Tr;n>>=1;}
for(int i=0;i<1<<m;++i)add(ans,A[1][b[K][i]]);
printf("%d\n",ans);
return 0;
}
【CF1152F】Neko Rules the Catniverse(动态规划)的更多相关文章
- CF1152 F. Neko Rules the Catniverse (dp)
题意 一条长为 \(n\) 的数轴,可以从任意整点 \(\in [1, n]\) 出发,假设当前在 \(x\) ,下一步能到达的点 \(y\) 需要满足,\(y\) 从未到过,且 \(1 \le y ...
- Codeforces Round #554 (Div. 2) F2. Neko Rules the Catniverse (Large Version) (矩阵快速幂 状压DP)
题意 有nnn个点,每个点只能走到编号在[1,min(n+m,1)][1,min(n+m,1)][1,min(n+m,1)]范围内的点.求路径长度恰好为kkk的简单路径(一个点最多走一次)数. 1≤n ...
- CodeForces 1152F2 Neko Rules the Catniverse (Large Version)
题目链接:http://codeforces.com/problemset/problem/1152/F2 题目大意 见http://codeforces.com/problemset/problem ...
- CodeForces 1152F1 Neko Rules the Catniverse (Small Version)
题目链接:http://codeforces.com/problemset/problem/1152/F1 题目大意 有 n 个星球,给定限制 m,从 x 星球走到 y 星球的条件是,$1 \leq ...
- CF859C Pie Rules 动态规划 逆推_思维题
题意:有 nnn 个物品,每个物品有不同的价值,物品按顺序分给两个人,有一块令牌,每回合拥有令牌的人拥有物品的分配权,但是该回合未获得物品的那个人会在下回合获得令牌,开始令牌在Bob手里,两个人都采取 ...
- hdu 1087 动态规划之最长上升子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1087 Online Judge Online Exercise Online Teaching Online C ...
- POJ3176——Cow Bowling(动态规划)
Cow Bowling DescriptionThe cows don't use actual bowling balls when they go bowling. They each take ...
- POJ_3176_Cow_Bowling_(数字三角形)_(动态规划)
描述 http://poj.org/problem?id=3176 给出一个三角形,每个点可以走到它下面两个点,将所有经过的点的值加起来,问最大的和是多少. Cow Bowling Time Limi ...
- 动态规划——线性dp
我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ...
随机推荐
- ASP.Net Mvc实现自定义User Identity用户身份识别系统(1)
目的 当我们新建asp.net mvc 项目时,我们在使用下图所示的代码是否有以下思考: 1,在this.User.Identity.Name,为什么可以使用this便可以选中Name属性: 2,若项 ...
- 基于vue-cli快速构建
基于vue-cli快速构建 https://www.jianshu.com/p/2769efeaa10a Vue是近两年来比较火的一个前端框架(渐进式框架吧),与reactjs和angularjs ...
- 【转载】 Sqlserver中通过Select Into语句快速单表备份
在Sqlserver数据库中,备份数据的方式有很多种,可以使用整个数据库备份,也可使用导出包含数据和架构的脚本文件的方式来进行单表或多表数据的备份,其实还有一种Select Into的方式可以快速备份 ...
- 初学Shiro
Shiro Shiro是什么? Apache Shiro是Java的一个安全(权限)框架. Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境下,也可以用者JavaEE环境下 ...
- git使用总结(持续更新,个人总结记录使用)
1.拉取代码报错(Couldn't merge origin/master: You have not concluded your merge (MERGE_HEAD exists).) 造成原因: ...
- BestSync多终端文件资料同步利器
分享一款多终端文件同步的强力软件,windows下使用. 我这里的多终端意思是,多台电脑.移动存储.云端. 就我个人而言,实用性在于移动硬盘和电脑上都有的文件,比如保存项目资料,电脑上需要编辑,有时外 ...
- window模拟linux环境-cygwin安装
cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,非常有用.通过它,你就可以在不安装linux的情况 ...
- Postman学习之【压力测试】
Postman请自行下载 下面是在网上随便抓了一个请求地址来做演示,把请求地址填入地址栏,此请求为GET请求.点击Send发送请求,请求结果将会在下方显示出来.每次的请求历史数据,会被记录下来,但是经 ...
- C# 虚拟串口通信
将主端口COM8拆分成 COM1和COM2两个虚拟端口 COM8接收的消息会传递给COM1和COM2 SerialPort spSend;//spSend,spReceive用虚拟串口连接,它们之间可 ...
- C++设计模式视频讲解
设计模式(C++) 视频网址: http://www.qghkt.com/ 设计模式(C++)视频地址: https://ke.qq.com/course/318637?tuin=a508ea62 目 ...