2022/8/25 总结
A.幸福
- 考场上没想起矩阵,写了个 的暴力,得 ;
Solution
-
矩阵乘法。对 进行化简,就可以化得一个式子: ,其中 表示斐波那契数列的第 项。
-
然而这样还是不能求和。
解决方案为将 也放进矩阵里。
于是设计答案矩阵构成为 ,则每次转移时将 算出再累加到 中,即可得到 。 -
与这个矩阵对应的转移矩阵为:
AC 矩阵乘法
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=998244353;
struct memr{
ll x[10][10];
int a,b;
memr operator*(const memr &_)const{
memr cnt;
memset(cnt.x,0,sizeof(cnt.x));
cnt.a=a,cnt.b=_.b;
for(int i=1;i<=a;++i)
for(int j=1;j<=_.b;++j)
for(int k=1;k<=b;++k)
(cnt.x[i][j]+=1ll*x[i][k]*_.x[k][j]%mod)%=mod;
return cnt;
}
};
memr ksm(ll y){
memr dx;
dx.a=dx.b=5;
memset(dx.x,0,sizeof(dx.x));
dx.x[1][1]=dx.x[2][1]=dx.x[3][1]=dx.x[4][1]=1;
dx.x[2][2]=dx.x[3][2]=dx.x[4][2]=1;
dx.x[2][3]=dx.x[4][4]=dx.x[4][5]=dx.x[5][4]=1;
memr cnt;
cnt.a=cnt.b=5;
for(int i=1;i<6;++i)
for(int j=1;j<6;++j)
cnt.x[i][j]=(i==j);
for(;y;y>>=1,dx=dx*dx)
if(y&1)
cnt=cnt*dx;
return cnt;
}
ll n;
int main(){
scanf("%lld",&n);
if(n==0){
printf("%d",1);
return 0;
}
memr ans;
ans.a=1,ans.b=5;
memset(ans.x,0,sizeof(ans.x));
ans.x[1][1]=3;
ans.x[1][2]=2,ans.x[1][3]=ans.x[1][5]=1;
ans.x[1][4]=2;
ans=ans*ksm(n-1);
printf("%lld",ans.x[1][1]);
return 0;
}
B.P6239 [JXOI2012]奇怪的道路
- 打表大法好啊,白嫖 ;
Solution
-
看数据范围,很明显是状压 。
-
设计状态 表示考虑前 个点, 条边,后 个点压成二进制为 ,前 个点向前的边都连完了, 只与在它之前长度为 的区间中的点连了边的方案数。如果节点 的度数为奇数,则表现在 中的那一位就为 。
-
状态转移如下:
- ,表示由 向 连一条边;
- ,表示从下一条边开始考虑连向 ;
- ,表示如果 节点度数为偶数,则考虑 点的连边情况;
AC code
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int n,m,k;
int f[35][35][(1<<10)+10][35];
int main(){
scanf("%d%d%d",&n,&m,&k);
f[1][0][0][0]=1;
for(int i=1;i<=n;++i){
for(int j=0;j<=m;++j){
for(int p=0;p<1<<(k+1);++p){
for(int q=min(i-1,k);q;--q){
(f[i][j][p][q-1]+=f[i][j][p][q])%=mod;
if(i>q)
(f[i][j+1][p^(1<<q)^1][q]+=f[i][j][p][q])%=mod;
}
if(!(p&(1<<k)))
(f[i+1][j][p<<1][min(i,k)]+=f[i][j][p][0])%=mod;
}
}
}
printf("%d",f[n][m][0][0]);
return 0;
}
本文作者:Star_LIcsAy
本文链接:https://www.cnblogs.com/Star-LIcsAy/p/16625561.html
版权声明:本作品采用Star_LIcsAy许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步