任意门:https://vijos.org/records/5be95b65d3d8a1366270262b

背景

守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她传送到后面的监狱内查看,她比较懒,一般不查看完所有的监狱,只是从入口进入,然后再从出口出来就算完成任务了。

描述

头脑并不发达的warden最近在思考一个问题,她的闪烁技能是可以升级的,k级的闪烁技能最多可以向前移动k个监狱,一共有n个监狱要视察,她从入口进去,一路上有n个监狱,而且不会往回走,当然她并不用每个监狱都视察,但是她最后一定要到第n个监狱里去,因为监狱的出口在那里,但是她并不一定要到第1个监狱。

守望者warden现在想知道,她在拥有k级闪烁技能时视察n个监狱一共有多少种方案?

格式

输入格式

第一行是闪烁技能的等级k(1<=k<=10)
第二行是监狱的个数n(1<=n<=2^31-1)

输出格式

由于方案个数会很多,所以输出它 mod 7777777后的结果就行了

样例1

样例输入1

2
4
Copy

样例输出1

5
Copy

限制

各个测试点1s

提示

把监狱编号1 2 3 4,闪烁技能为2级,
一共有5种方案
→1→2→3→4
→2→3→4
→2→4
→1→3→4
→1→2→4

小提示:建议用int64,否则可能会溢出

题意概括:

给出可闪现的距离 K 房间个数 N,问到达终点的方案数;

解题思路:

很明显的DP,DP的转移方程也显而易见 F(N) = F(N-1)+F(N-2)+ ... + F(N-K);

找出递推式,很显然可以用矩阵来优化,并且系数为 1,So easy!

以为到这就解决问题了,太粗心啦,注意数据范围,注意数据精度!!!要用 long long

Ac code:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define LL long long
using namespace std;
const int MAXN = 11;
const LL Mod  = 7777777;
int N, K;struct mat
{LL m[MAXN][MAXN];
}base, tmp, ans;mat muti(mat a, mat b)
{mat res;memset(res.m, 0, sizeof(res.m));for(int i = 1; i <= K; i++)for(int j = 1; j <= K; j++){if(a.m[i][j]){for(int k = 1; k <= K; k++){res.m[i][k] = (res.m[i][k] + a.m[i][j]*b.m[j][k])%Mod;
//                res.m[i][k] = res.m[i][k]%Mod;
            }}}return res;
}mat qpow(mat a, int n)
{mat res;memset(res.m, 0, sizeof(res));for(int i = 1; i <= K; i++) res.m[i][i] = 1LL;while(n){if(n&1) res = muti(res, a);n>>=1;a = muti(a, a);}return res;
}int main()
{scanf("%d%d", &K, &N);memset(base.m, 0, sizeof(base.m));base.m[0][1] = 1LL;for(int i = 1; i <= K; i++){for(int j = 0; j < i; j++)base.m[i][1] += base.m[j][1]%Mod;}if(N <= K) printf("%lld\n", base.m[N][1]);else{memset(tmp.m, 0, sizeof(tmp.m));for(int i = 1; i < K; i++){tmp.m[i][i+1] = 1LL;}for(int i = 1; i <= K; i++) tmp.m[K][i] = 1LL;tmp = qpow(tmp, N-K);mat ans = muti(tmp, base);printf("%lld\n", ans.m[K][1]%Mod);}return 0;
}

转载于:https://www.cnblogs.com/ymzjj/p/9948370.html

VOJ1067 【矩阵经典7 构造矩阵】相关推荐

  1. 纪念SlingShot 矩阵快速幂 构造矩阵

    纪念SlingShot Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit  ...

  2. POJ 2396 构造矩阵(上下流)

    题意:       要求构造一个矩阵,给你行和,列和,还有一些点的上下范围,输出一个满足题意的矩阵. 思路:       这个题目很经典,这是自己看上下流后接触的第一道题,感觉很基础的一道题目,现在我 ...

  3. hdu4975 行列和构造矩阵(dp判断唯一性)

    题意:       和hdu4888一样,只不过是数据加强了,就是给你行列的和,让你构造一个矩阵,然后判断矩阵是否唯一. 思路:       构造矩阵很简单,跑一次最大流就行了,关键是判断矩阵的唯一性 ...

  4. hdu4888 最大流(构造矩阵)

    题意:       让你构造一个矩阵,满足每一行的和,和每一列的和都等于他给的,还要判断答案是否唯一,还有一点就是矩阵内所有的数字都是[0,k]范围的. 思路:       这个题目看完就让我想起了h ...

  5. hdu 1757 A Simple Math Problem 构造矩阵

    题意:函数f(x), 若 x < 10 f(x) = x. 若 x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + -- + ...

  6. c语言编程 输入螺旋数组,C语言 经典题目螺旋矩阵 实例详解

    C语言 经典题目螺旋矩阵 实例详解 C语言 经典题目螺旋矩阵 //N阶螺旋矩阵 #include #include int main() { int N,i,j,n,num=1; int a[10][ ...

  7. HDU-6470 Count (构造矩阵+矩阵快速幂)

    题目链接 Problem Description Farmer John有n头奶牛. 某天奶牛想要数一数有多少头奶牛,以一种特殊的方式: 第一头奶牛为1号,第二头奶牛为2号,第三头奶牛之后,假如当前奶 ...

  8. 矩阵经典题目六:poj 3070 Fibonacci

    http://poj.org/problem?id=3070 按已构造好的矩阵,那么该矩阵的n次方的右上角的数便是f[n]. #include <stdio.h> #include < ...

  9. BZOJ 3240 构造矩阵+矩阵快速幂

    思路: ax+b cx+d 构造矩阵+矩阵快速幂 (需要加各种特判,,,,我好像加少了- ) //By SiriusRen #include <cstdio> #include <c ...

  10. Matrix Power Series(矩阵快速幂,二分法/构造矩阵套矩阵)

    传送门 题意: 思路: 方法一:(二分) 分析: 奇偶分类讨论: 1.代码: #include <iostream> #include <cstdio> #include &l ...

最新文章

  1. linux开启远程访问端口
  2. 基于SLF4J MDC机制实现日志的链路追踪
  3. 外观数列Python解法
  4. django+ajax+表格加载,如何使用ajax在Django-admin表格内联中读取/写入输入字段?
  5. 关于常用的编码工具如何引入jar包
  6. 开发者如何快速精简容器云镜像?| 技术头条
  7. CSS之cacl()函数
  8. HTML5网页语音识别功能演示
  9. Vuforia的ARcamera通过识别人工标识码出现虚拟物体后在其相机视野中不显示人工标识码
  10. 2021《考研数学接力题典1800》勘误表(附学霸高分笔记)
  11. 计算机在线题库系统,试题库管理系统.doc
  12. PPT炫酷英文字体设置之Centaur
  13. Direct3d基础一__CPP基础之碰到无法打开源文件D3DX11.h如何解决
  14. HDU6834 Yukikaze and Smooth numbers
  15. GAE+bottle+jinja2+beaker快速开发demo - Python,GAE - language - ITeye论坛
  16. docker run 挂载卷_Docker容器数据卷-Volume小结
  17. Jenkins-LADP认证管理员密码修改后导致Jenkins没法登陆
  18. 使用RXTX实现简单串口通信调试工具
  19. 如何学习大数据?这才是完整的大数据学习体系!!
  20. 物联网技术如何改变了我们的生活?

热门文章

  1. 问题:子进程父进程哪个先执行:【转】关于 fork 和父子进程的理解
  2. Spark Architecture
  3. Ubi菜鸟(二)Ubuntu16.04LTS新特性
  4. html点击按钮 重新加载页面或者跳转页面实现
  5. iBatis和Hibernate浅析
  6. 修改 MyEclipse 编辑区域背景颜色
  7. 一种软件定时器/超时机制的实现方法
  8. axios发post请求,后端接收不到参数的问题
  9. flask before_request after_request
  10. LintCode Python 简单级题目 41.最大子数组 - 44.最小子数组和