掷骰子

思路

可以先定义一个状态f[i] [j]: 前i个骰子,最后一个面是j的方法数,

肯定超时,然鹅可以混一些分,代码如下

 for(int i=1;i<=6;i++) f[0][i]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=6;j++)
{
for(int k=1;k<=6;k++)
{
int _ops=ops[j];
if(w[_ops][j]) continue;
f[i][j] = (f[i-1][k] + f[i][j]) %mod;
}
}
}

开始考虑优化代码

转移方程中:

f[i] [j] = (0|4)f[i-1] [1] + (0|4)f[i-1] [2] +(0|4)f[i-1] [3] +…

方程形式一样,系数在确定好之后也一样。我们考虑矩阵快速幂来加速。

F=F*A^(n-1)

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define mst(s,_s) memset(s, _s, sizeof(s))
const double PI = acos(-1.0);
const double eps = 1e-6;
const int INF = 0x3f3f3f3f;
const int N = 1e6+100;
int T,n,m;
const int mod=1e9+7;
ll A[10][10];
int op[10];
ll F[10];
void mult(ll c[],ll a[],ll b[][10])
{
ll temp[10]={0};
for(int i=1;i<=6;i++)
{ for(int k=1;k<=6;k++)
{
temp[i]=(temp[i]+a[k]*b[i][k])%mod;
}
}
for(int i=1;i<=6;i++)
c[i]=temp[i];
} void mult(ll c[][10],ll a[][10],ll b[][10])
{
int temp[10][10]={0};
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
{
for(int k=1;k<=6;k++){
temp[i][j] = (temp[i][j] + a[i][k] * b[k][j]) %mod;
//temp[i][j]+=a[i][k]*b[k][j];
}
}
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
c[i][j]=temp[i][j];
} int main() {
cin>>n>>m;
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
A[i][j]=4;
op[1]=4;
op[4]=1;
op[2]=5;
op[5]=2;
op[3]=6;
op[6]=3;
for(int i=0;i<m;i++)
{
int a,b;
cin>>a>>b;
A[a][op[b]]=0;
A[b][op[a]]=0;
}
for(int i=1;i<=6;i++) F[i]=4; int b=n-1;
while(b)
{
if(b&1) mult(F,F,A);
mult(A,A,A);
b>>=1;
} ll res=0;
for(int i=1;i<=6;i++)
res=(res+F[i])%mod;
cout<<res<<endl; return 0;
}

掷骰子【普通线性DP】【转移方程可以优化为矩阵快速幂】的更多相关文章

  1. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  2. $bzoj1009-HNOI2008$ $GT$考试 字符串$dp$ 矩阵快速幂

    题面描述 阿申准备报名参加\(GT\)考试,准考证号为\(N\)位数\(x_1,x_2,...,x_n\ (0\leq x_i\leq 9)\),他不希望准考证号上出现不吉利的数字. 他的不吉利数字\ ...

  3. HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )

    题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...

  4. bzoj2004 矩阵快速幂优化状压dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=2004 以前只会状压dp和矩阵快速幂dp,没想到一道题还能组合起来一起用,算法竞赛真是奥妙重重 小Z ...

  5. 2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)

    传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1 ...

  6. bzoj1009 [HNOI2008]GT考试——KMP+矩阵快速幂优化DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 字符串计数DP问题啊...连题解都看了好多好久才明白,别提自己想出来的蒟蒻我... 首 ...

  7. POJ 3744 【矩阵快速幂优化 概率DP】

    搞懂了什么是矩阵快速幂优化.... 这道题的重点不是DP. /* 题意: 小明要走某条路,按照个人兴致,向前走一步的概率是p,向前跳两步的概率是1-p,但是地上有地雷,给了地雷的x坐标,(一维),求小 ...

  8. LOJ2325. 「清华集训 2017」小 Y 和恐怖的奴隶主【矩阵快速幂优化DP】【倍增优化】

    LINK 思路 首先是考虑怎么设计dp的状态 发现奴隶主的顺序没有影响,只有生命和个数有影响,所以就可以把每个生命值的奴隶主有多少压缩成状态就可以了 然后发现无论是什么时候一个状态到另一个状态的转移都 ...

  9. BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*

    BZOJ5298 CQOI2018 交错序列 [DP+矩阵快速幂优化] Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻 ...

  10. HDU5411——CRB and Puzzle——————【矩阵快速幂优化dp】

    CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

随机推荐

  1. PCA降维练习

    [题目] 1.现有我国大陆30个省.直辖市.自治区的经济发展状况数据集如表所示,包括8项经济指标:国民生产总值(A1):居民消费水平(A2):固定资产投资(A3):职工平均工资(A4):货物周转量(A ...

  2. Windows初始化.net core环境

    1.项目使用.ner core版本(例:.net core.3.1) 1.1安装运行环境 https://dotnet.microsoft.com/en-us/download 1.2安装.net 运 ...

  3. /usr/bin/install: cannot create regular file `/usr/local/jpeg6/include/jconfig.h'

    出现下列异常: /usr/bin/install -c -m 644 jconfig.h /usr/local/jpeg6/include/jconfig.h /usr/bin/install: ca ...

  4. C++ primer笔记 -基本语言

    C++最重要的特征是类,程序员可以使用类自定义数据类型,C++有时候将这些类型称为"类类型",以区别于内置类型. 类型作用: 1.告诉我们数据代表的是什么意思 2.对数据可以执行哪 ...

  5. uniapp 上传

    fileList1: [], // uviewui ui组件<u-upload uploadText="上传打款凭证" :fileList="fileList1&q ...

  6. kubectl 补全报错:-bash: _get_comp_words_by_ref: command not found

    1.kubectl自动补全设置 yum -y install bash-completion source <(kubectl completion bash) # 在 bash 中设置当前 s ...

  7. FIFO 串口接收处理机制

    与安富莱电子的串口处理机制做对比交互 参考链接: https://www.eet-china.com/mp/a161019.html

  8. C#中Newtonsoft.Json.dll 的使用

    1.类库说明Newtonsoft.Json.dll是.NET 下开源的json格式序列号和反序列化的类库,利用此类库,可以方便地操作json数据,其中在反序列化时,可以直接将格式化的json数据处理成 ...

  9. element 表格show-overflow-tooltip的属性设置样式

    在style标签中不要加scoped .el-tooltip__popper { max-width: 60% !important; } .el-tooltip__popper, .el-toolt ...

  10. win10任务栏图标设置“不合并标签但隐藏文字”

    设置如图不分组即可,下载链接 https://files-cdn.cnblogs.com/files/slyuan/7tt_setup.rar