题目传送门

题意:

一个魔法水晶可以分裂成m个水晶,求放满n个水晶的方案数(mol1e9+7)

思路:

线性dp,dp[i]=dp[i]+dp[i-m];

由于n到1e18,所以要用到矩阵快速幂优化

注意初始化

代码:

#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
typedef long long ll;
#define MAX 105
const int N=;//矩阵的大小
int T;
ll n,m;
ll add(ll a,ll b)
{
a%=mod;
b%=mod;
return (a+b)%mod;
}
struct hh
{
ll ma[N][N];
}a,res;
hh multi(hh a,hh b)
{
hh tmp;
memset(tmp.ma,,sizeof(tmp.ma));
for(int i=;i<N;i++)
for(int j=;j<N;j++)
for(int k=;k<N;k++)
{
tmp.ma[i][j]=add(tmp.ma[i][j],a.ma[i][k]*b.ma[k][j]);
}
return tmp;
}
void fast_pow(hh a,long long k)
{
memset(res.ma,,sizeof(res.ma));
for(int i=;i<N;i++)res.ma[i][i]=;
while(k>)
{
if(k&) res=multi(res,a);
a=multi(a,a);
k>>=;
}
}
int main()
{
while(~scanf("%lld%d",&n,&m))
{
for(int i=;i<=m;i++) a.ma[i][i-]=;
a.ma[][]=a.ma[][m]=;
fast_pow(a,n);
printf("%lld\n",res.ma[][]);
}
return ;
}

最新文章

  1. C++ 与 php 的交互 之----- C++ 异步获取 网页文字内容,异步获取 php 的 echo 值。
  2. java操作数据库增删改查的小工具1--TxQueryRunner
  3. 用Android Studio 出现的问题
  4. SQL*Loader之CASE1
  5. [LintCode] Intersection of Two Arrays II 两个数组相交之二
  6. JMeter学习-019-JMeter 监听器之【聚合报告】界面字段解析及计算方法概要说明
  7. tomcat 6.0.44 &ldquo;has failed to stop it. This is very likely to create a memory leak&rdquo; 问题调查
  8. Redis 3.0 集群搭建
  9. Mysql查询优化器
  10. SQL server2012连接不上
  11. sass中出现的中文问题
  12. (五)学习JavaScript之firstChild 属性
  13. [每日一题] 11gOCP 1z0-052 :2013-08-30 差异的增量备份.....................................................A1
  14. 使用 Eclipse Memory Analyzer 进行简单内存泄漏分析
  15. css实现一行居中显示,两行靠左显示,超过两行以引号省略
  16. Android 开发使用第三方库出现Crash时处理方案汇总
  17. 学习Tensorflow,反卷积
  18. ELK全Dokcer 部署
  19. maven wrapper使用本地maven
  20. elasticsearch best_fields most_fields cross_fields从内在实现看区别——本质就是前两者是以field为中心,后者是词条为中心

热门文章

  1. 【华容道】题解(NOIP2013提高组day2)
  2. Java使用google身份验证器实现动态口令验证
  3. #1126-JSP HTTP状态码
  4. Oracle update或alter表被锁住的问题
  5. Seaborn 绘图代码
  6. 我用HTML写简历
  7. Windows XP SP2上安装.net 4
  8. NSIS打包后无法解压7z资源包的问题
  9. python-网络编程requests模块
  10. ubuntu 安装java1.8