题解

转移方程好写吧

一个一维递推式

然后我们可以构造矩阵优化

嗯,最近学一下递推优化

代码

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define mod 7777777
  5. int K,n;
  6. #define LL long long
  7. const int maxn = 11;
  8. struct matrix {
  9. int a[maxn][maxn];int c,r;
  10. void in(int x,int y) {
  11. r = x,c = y;
  12. }
  13. matrix() {
  14. c = 0,r = 0;
  15. memset(a,0,sizeof a); n = 0 ;
  16. }
  17. } ans,tmp;
  18. matrix operator * (const matrix A,const matrix B) {
  19. matrix ret; ret.in(A.r,B.c);
  20. for(int i = 0; i < ret.r;++ i)
  21. for(int j = 0;j < ret.c;++ j)
  22. for(int k = 0;k < A.c;++ k)
  23. ret.a[i][j] = (ret.a[i][j] + ((long long )A.a[i][k] * B.a[k][j] % mod) )% mod;
  24. return ret;
  25. }
  26. int dp[maxn];
  27. matrix pow(matrix a,int k) {
  28. matrix ret;
  29. ret.in(K,K);
  30. for(int i = 0;i < K;++ i) ret.a[i][i] = 1;
  31. for(;k;k >>= 1,a = a * a)
  32. if(k & 1) ret = ret * a;
  33. return ret;
  34. }
  35. int main() {
  36. scanf("%d%d",&K,&n);
  37. tmp.in(K,K);
  38. for(int i = 0;i < K;++ i) tmp.a[i][0] = 1;
  39. for(int i = 1;i < K;++ i) tmp.a[i - 1][i] = 1;
  40. tmp = pow(tmp,n);
  41. ans.in(1,K);
  42. ans.a[0][0] = 1;
  43. ans = ans * tmp;
  44. printf("%lld\n",ans.a[0][0]);
  45. return 0;
  46. }

vijos Warcraft III 守望者的烦恼的更多相关文章

  1. C++矩阵加速经典题目:Warcraft III 守望者的烦恼 [vijos 1067]

    Warcraft III 守望者的烦恼 背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫"闪烁", ...

  2. [矩阵十题第七题]vijos 1067 Warcraft III 守望者的烦恼 -矩阵快速幂

    背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她传送到后面的监狱内查看,她比较懒,一般不查看 ...

  3. (VIJOS) VOJ 1067 Warcraft III 守望者的烦恼 矩阵快速幂

    https://vijos.org/p/1067   就..挺普通的一道题..自己学一下怎么推式子就可以...细节不多但是我还是日常爆细节..比如说循环写成从负数开始...   只求ac不求美观的丑陋 ...

  4. vijos 1067 Warcraft III 守望者的烦恼 矩阵

    题目链接 我们可以很容易的推出dp的式子, dp[i] = sigma(j : 1 to k) dp[i-j]. 但是n太大了, 没有办法直接算, 所以我们构造一个矩阵, 然后快速幂就好了. 就像这样 ...

  5. Vijos P1067Warcraft III 守望者的烦恼

    题目 背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她传送到后面的监狱内查看,她比较懒,一般 ...

  6. 矩阵经典题目七:Warcraft III 守望者的烦恼(矩阵加速递推)

    https://www.vijos.org/p/1067 非常easy推出递推式f[n] = f[n-1]+f[n-2]+......+f[n-k]. 构造矩阵的方法:构造一个k*k的矩阵.当中右上角 ...

  7. 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 ...

  8. [vijos1067]Warcraft III 守望者的烦恼

    就是上次考得fyfy.竟然是原题... // It is made by XZZ #include<cstdio> #include<algorithm> #include&l ...

  9. [Vijos1067]Warcraft III 守望者的烦恼(DP + 矩阵优化)

    传送门 可知 f[i] = f[i - 1] + f[i - 2] + ... + f[i - k] 直接矩阵优化就好了 #include <cstdio> #include <cs ...

随机推荐

  1. ajax技术整理总结(1)

    1.创建ajax对象 var xhr=new XMLHttpRequest(); 4.监听状态信息 xhr.onreadystatechange=function(){ //4接收完毕 ){ docu ...

  2. wordpress 模板制作之一

    WP模板工作原理图:

  3. 好消息! 不用再羡慕Python有jupyter 我R也有Notebook了【附演示视频】

    熟悉python的朋友可能知道jupyter notebook.它是一个Web应用程序,允许你创建和共享代码,方程,可视化和说明性文本文档.现在,我们可以在RStudio中实现R Notebook的功 ...

  4. [005] unique_sub_string

    [Description] Given a string, find the largest unique substring. e.g. str[] = "asdfghjkkjhgf&qu ...

  5. 未找到与约束 ContractName Microsoft.VisualStudio.Utilitues.IContentTypeRegistryService......

    1.问题提出 用VS 2013 with Update5 开发项目,点击项目中的文件,发现打不开,抛出如下的错误. 错误提示: 未找到与约束 ContractName Microsoft.Visual ...

  6. ntp 控制报文

    //make the procedure into block//2014.7.23 OK//#include "CSocket.h" #define NTP_SERVER_IP ...

  7. leetcode 之Remove Duplicates from Sorted Array(1)

    删除数组中的重复元素并返回新数组的个数 思路:保留不同的元素即可. int removeDeplicates(int A[], int n) { ; ; i < n; i++) { if (A[ ...

  8. 开始学习MaxCompute

    https://help.aliyun.com/document_detail/34615.html?spm=a2c4g.11186623.6.688.jVxTMW

  9. [你必须知道的.NET]第二十一回:认识全面的null

    发布日期:2008.7.31 作者:Anytao © 2008 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 null.nullable.??运算符.null ...

  10. 基于Token的授权(with srping mvc)

    @Override public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc) throws IOExce ...