vijos 1067 Warcraft III 守望者的烦恼 矩阵
我们可以很容易的推出dp的式子, dp[i] = sigma(j : 1 to k) dp[i-j]。
但是n太大了, 没有办法直接算, 所以我们构造一个矩阵, 然后快速幂就好了。
就像这样构建矩阵(举个例子
- #include <vector>
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <cmath>
- #include <map>
- #include <set>
- #include <string>
- #include <queue>
- #include <stack>
- #include <bitset>
- using namespace std;
- #define pb(x) push_back(x)
- #define ll long long
- #define mk(x, y) make_pair(x, y)
- #define lson l, m, rt<<1
- #define mem(a) memset(a, 0, sizeof(a))
- #define rson m+1, r, rt<<1|1
- #define mem1(a) memset(a, -1, sizeof(a))
- #define mem2(a) memset(a, 0x3f, sizeof(a))
- #define rep(i, n, a) for(int i = a; i<n; i++)
- #define fi first
- #define se second
- typedef pair<int, int> pll;
- const double PI = acos(-1.0);
- const double eps = 1e-;
- const int mod = ;
- const int inf = ;
- const int dir[][] = { {-, }, {, }, {, -}, {, } };
- ll n, m, dp[];
- struct Matrix
- {
- ll a[][];
- Matrix() {
- mem(a);
- }
- };
- Matrix operator * (Matrix a, Matrix b) {
- Matrix c;
- for(int i = ; i<n; i++) {
- for(int j = ; j<n; j++) {
- for(int k = ; k<n; k++) {
- c.a[i][j] += a.a[i][k]*b.a[k][j];
- c.a[i][j] %= mod;
- }
- }
- }
- return c;
- }
- Matrix operator ^(Matrix a, ll b) {
- Matrix tmp;
- for(int i = ; i<n; i++)
- tmp.a[i][i] = ;
- while(b) {
- if(b&)
- tmp = tmp*a;
- a = a*a;
- b>>=;
- }
- return tmp;
- }
- int main()
- {
- ll k;
- cin>>n>>k;
- dp[] = ;
- for(int i = ; i<=n; i++) {
- for(int j = ; j<i; j++)
- dp[i] += dp[j];
- }
- if(k<=n) {
- cout<<dp[k]<<endl;
- return ;
- }
- Matrix tmp, ans;
- for(int i = ; i<n; i++) {
- tmp.a[][i] = ;
- tmp.a[i+][i] = ;
- }
- tmp = tmp^(k-n);
- for(int i = ; i<n; i++) {
- ans.a[n-i-][] = dp[i+];
- }
- ans = tmp*ans;
- cout<<ans.a[][]<<endl;
- return ;
- }
vijos 1067 Warcraft III 守望者的烦恼 矩阵的更多相关文章
- [矩阵十题第七题]vijos 1067 Warcraft III 守望者的烦恼 -矩阵快速幂
背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她传送到后面的监狱内查看,她比较懒,一般不查看 ...
- (VIJOS) VOJ 1067 Warcraft III 守望者的烦恼 矩阵快速幂
https://vijos.org/p/1067 就..挺普通的一道题..自己学一下怎么推式子就可以...细节不多但是我还是日常爆细节..比如说循环写成从负数开始... 只求ac不求美观的丑陋 ...
- VOJ 1067 Warcraft III 守望者的烦恼 (矩阵高速功率+dp)
主题链接 明显的 dp[n] = dp[n-k] + dp[n-k+1] + ... +dp[n-1]; 然后要用矩阵来优化后面的状态转移. 也就是矩阵 0 1 0 0 a b 0 0 ...
- C++矩阵加速经典题目:Warcraft III 守望者的烦恼 [vijos 1067]
Warcraft III 守望者的烦恼 背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫"闪烁", ...
- 矩阵经典题目七:Warcraft III 守望者的烦恼(矩阵加速递推)
https://www.vijos.org/p/1067 非常easy推出递推式f[n] = f[n-1]+f[n-2]+......+f[n-k]. 构造矩阵的方法:构造一个k*k的矩阵.当中右上角 ...
- vijos Warcraft III 守望者的烦恼
题解 转移方程好写吧 一个一维递推式 然后我们可以构造矩阵优化 嗯,最近学一下递推优化 代码 #include<cstdio> #include<cstring> #inclu ...
- [Vijos1067]Warcraft III 守望者的烦恼(DP + 矩阵优化)
传送门 可知 f[i] = f[i - 1] + f[i - 2] + ... + f[i - k] 直接矩阵优化就好了 #include <cstdio> #include <cs ...
- [vijos1067]Warcraft III 守望者的烦恼
就是上次考得fyfy.竟然是原题... // It is made by XZZ #include<cstdio> #include<algorithm> #include&l ...
- vijosP1067Warcraft III 守望者的烦恼
vijosP1067Warcraft III 守望者的烦恼 链接:https://vijos.org/p/1067 [思路] 矩阵乘法. 可以得出递推式: f[i]=sum{ f[n-1], ...
随机推荐
- Android EditText小结
防止EditText获取焦点弹出输入法 android:focusable="true" android:focusableInTouchMode="true" ...
- Swift语法基础入门四(构造函数, 懒加载)
Swift语法基础入门四(构造函数, 懒加载) 存储属性 具备存储功能, 和OC中普通属性一样 // Swfit要求我们在创建对象时必须给所有的属性初始化 // 如果没办法保证在构造方法中初始化属性, ...
- c#创建带参数的线程
1.无参数线程的创建 Thread thread = new Thread(new ThreadStart(getpic)); thread.Start(); private void showmes ...
- OpenGL鼠标旋转图像
(鼠标旋转功能) #include <iostream> using namespace std; #include<gl/glut.h> GLfloat transx,tra ...
- hql中in的用法
平时经常用Hibernate,由于习惯表间不建立关联,所以HQL查询时候经常要用in语句. 由于表间没有建立外键的关联关系所以使用in是最常见的代替使用对象po中的set. 但是在写hql时如果在ne ...
- 初学swift笔记 函数(六)
import Foundation /* func 函数名 (参数名:参数类型) { } func 函数名 (参数名:参数类型) ->Void{ } func 函数名 (参数名:参数类型) -& ...
- 几种常用单片机I/O口线的驱动能力
摘要: 详细分析了几种常见单片机的I/O口结构,并据此分析其驱动能力大小 在控制系统中,经常用单片机的I/O口驱动其他电路.几种常用单片机I/O口驱动能力在相关的资料中的说法是:GMS97C2051. ...
- Qt5.3.0 for android windows平台下搭建及demo(虫子的博客)
----我的生活,我的点点滴滴!! 部门领导突然心血来潮,想在android平台上做应用,但是我们大多产品属于嵌入式(本吊只负责写写应用,苦比的被强行顶过来搞这,由于这还得领导吵了一架,架虽然吵完了, ...
- 960 grid 使用
去官网下载960 grid,解压后可以看到css下面有如下文件: 960.css是一个综合性文件.我们要引入960 ,reset和text 3 个文件. 一般情况下调用: <link rel=” ...
- 如何同时激活两个不同版本的MyEclipse 【MyEclipse2013和MyEclipse2014同时激活】
激活一个MyEclipse的步骤,大家都会,在这里就不多说了,不会的可以看:http://jingyan.baidu.com/article/3ea51489cc14d452e71bba7a.html ...