【BZOJ2004】公交线路(动态规划,状态压缩,矩阵快速幂)
2018-02-09 09:47
417 查看
【BZOJ2004】公交线路(动态规划,状态压缩,矩阵快速幂)
题面
BZOJ题解
看到\(k,p\)这么小不难想到状态压缩
看到\(n\)这么大,不难想到矩阵快速幂
那么,我们来考虑朴素的\(dp\)
设\(f[i][j]\)表示当前位置为\(i\),前面的\(P\)个位置的状态为\(j\)
其中,状态的含义是某个公交线路最后的停靠站
如果是最后的停靠站就是\(1\),否则是\(0\)
那么,任意状态中只存在\(k\)个\(1\)
并且表示\(i\)的二进制位一定是\(1\)
所以状态相当于最多只会有\(120\)个左右
考虑转移,
每次相当于从原来的状态中,
把一个\(1\)放到了当前位置
其他的依次向左挪一个位置
那么,如果两个状态之间满足这个关系,就可以转移
我们发现转移之和后面的\(j\)有关
所以矩阵快速幂就行了
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<set> #include<map> #include<vector> #include<queue> using namespace std; #define ll long long #define RG register #define MOD 30031 inline int read() { RG int x=0,t=1;RG char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=-1,ch=getchar(); while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar(); return x*t; } int n,K,P; int zt[1<<11],ss,mp[1<<11]; struct Dalao { int s[150][150]; void init(){memset(s,0,sizeof(s));} void pre() { init(); for(int i=1;i<=ss;++i)s[i][i]=1; } }zsy; Dalao operator*(Dalao a,Dalao b) { Dalao ret;ret.init(); for(int i=1;i<=ss;++i) for(int j=1;j<=ss;++j) for(int k=1;k<=ss;++k) ret.s[i][j]=(ret.s[i][j]+a.s[i][k]*b.s[k][j]%MOD)%MOD; return ret; } Dalao fpow(Dalao a,int b) { Dalao s;s.pre(); while(b){if(b&1)s=s*a;a=a*a;b>>=1;} return s; } int ws(int x){int ret=0;while(x)++ret,x-=x&(-x);return ret;} bool check(int a,int b) { if(ws((a<<1)&b)!=K-1)return false; return true; } int main() { n=read();K=read();P=read(); for(int i=0;i<(1<<P);++i) if((i&1)&&ws(i)==K)zt[++ss]=i; for(int i=1;i<=ss;++i) for(int j=1;j<=ss;++j) if(check(zt[i],zt[j])) zsy.s[j][i]=1; zsy=fpow(zsy,n-K); printf("%d\n",zsy.s[1][1]); return 0; }
相关文章推荐
- 【BZOJ2004】公交线路(动态规划,状态压缩,矩阵快速幂)
- 100道动态规划——31 POJ 2411 && POJ 2663 && POJ 3420 状态压缩 矩阵快速幂
- 【jzoj4787】【数格子】【 状态压缩动态规划】【矩阵快速幂】
- BZOJ 2004|HNOI 2010 Day 1|公交线路|状态压缩动态规划|矩阵乘法
- [BZOJ 2004][HNOI 2010]Bus 公交线路(矩阵快速幂加速DP)
- [BZOJ]2004: [Hnoi2010]Bus 公交线路 状态压缩DP+矩阵乘法
- BZOJ 1087 浅谈状态压缩动态规划的转移
- BZOJ 4145 浅谈状态压缩动态规划背包问题
- BZOJ 2064 浅谈状态压缩动态规划基础及lowbit枚举子集和
- 动态规划(状态压缩):BZOJ 2621 [Usaco2012 Mar]Cows in a Skyscraper
- hdu 2809 God of War(动态规划之状态压缩)
- 【bzoj2073】[POI2004]PRZ 状态压缩dp
- BZOJ 1212 HNOI2004 L语言 AC自动机(Trie树)+动态规划
- kuangbin求带飞DP1 Doing HomeWork(动态规划+状态压缩)
- 状态压缩动态规划 -- 棋盘问题 POJ 1321
- BZOJ 2004 Bus 公交线路(矩阵)
- 动态规划之状态压缩专题
- Pieces(hdu4628,状态压缩的动态规划)
- uva 11795 Mega Man's Mission(动态规划-状态压缩DP)
- 动态规划之状态压缩dp入门