[LOJ 6704] 健身计划
问题描述
九条可怜是一个肥胖的女孩.
她最近长胖了,她想要通过健身达到减肥的目的,于是她决定每天做n次仰卧起坐以达到健身的目的.
她可以将这n次动作分为若干组完成,每一次完成ai次仰卧起坐,每做完一次都会获得 \(F_{a_i}\) 点数,序列 \(F\) 满足如下关系:
\]
九条可怜每天只会做n个动作,每一个分组方案可以获得的贡献是\(\prod_{i}F_{a_i}\),她想要知道所有分组方案的贡献和.答案对\(10^9+7\)取膜.
输入格式
输入仅一行,包含四个整数 $n, x, a, b $,含义见题面。
输出格式
输出包含一个整数,表示所有健身方案的贡献和.
样例输入
3 1 1 1
样例输出
5
解析
看到这种形式的题目一般都会和矩阵快速幂优化递推有关系。不妨先考虑如何DP转移,再从优化转移入手:
设 \(f_i\) 表示当 \(n=i\) 时的答案,那么不难写出如下状态转移方程:
\]
考虑想办法把式子中的求和号去掉。我们有这样的操作:
xf_{i+1}-af_i &= x\sum_{j=0}^{i}f_jF_{i+1-j}-a\sum_{j=0}^{i-1}f_jF_{i-j}\\
&=xf_iF_1+x\sum_{j=0}^{i-1}f_jF_{i+1-j}-a\sum_{j=0}^{i-1}f_jF_{i-j}\\
&=xf_i+x\sum_{j=0}^{i-1}f_j\frac{aF_{i-j}+bF_{i-j-1}}{x}-a\sum_{j=0}^{i-1}f_jF_{i-j}\\
&=xf_i+a\sum_{j=0}^{i-1}f_jF_{i-j}+b\sum_{j=0}^{i-1}f_jF_{i-j-1}-a\sum_{j=0}^{i-1}f_jF_{i-j}\\
&=xf_i+b\sum_{j=0}^{i-2}f_jF_{i-j-1}+bf_{i-1}F_0\\
&=xf_i+bf_{i-1}
\end{align}
\]
所以有\(f_i=\frac{x+a}{x}f_{i-1}+\frac{b}{x}f_{i-2}\)。
然后,就可以构造矩阵转移了。注意系数中的分母要用逆元。
代码
#include <iostream>
#include <cstdio>
#define int long long
using namespace std;
const int mod=1000000007;
struct Matrix{
int a[3][3],n,m;
}S;
int n,x,a,b;
Matrix mult(Matrix a,Matrix b)
{
Matrix c;
c.n=a.n,c.m=b.m;
for(int i=1;i<=c.n;i++){
for(int j=1;j<=c.m;j++) c.a[i][j]=0;
}
for(int i=1;i<=a.n;i++){
for(int j=1;j<=b.m;j++){
for(int k=1;k<=a.m;k++) c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j]%mod)%mod;
}
}
return c;
}
Matrix poww(Matrix a,int b)
{
b--;
Matrix ans=a,base=a;
while(b){
if(b&1) ans=mult(ans,base);
base=mult(base,base);
b>>=1;
}
return ans;
}
int pow(int a,int b)
{
int ans=1,base=a;
while(b){
if(b&1) ans=ans*base%mod;
base=base*base%mod;
b>>=1;
}
return ans;
}
signed main()
{
cin>>n>>x>>a>>b;
Matrix ans;
ans.n=1,ans.m=2;
ans.a[1][1]=1;ans.a[1][2]=0;
S.a[1][1]=(a+x)*pow(x,mod-2)%mod,S.a[2][1]=b*pow(x,mod-2)%mod,S.a[1][2]=1;
S.n=2,S.m=2;
ans=mult(ans,poww(S,n-1));
printf("%lld\n",ans.a[1][1]);
return 0;
}
[LOJ 6704] 健身计划的更多相关文章
- 健身计划_from85to75
第一天没什么好写的,这半年也没看什么书,就写写未来的规划好了. 当然是从最简单的健身计划开始写咯. 关键词:弹性 目标:减肥,上肢力量 时间:3-4次/周(Thur,Fri,Sat,Sun),1h-1 ...
- keep健身计划
下一个月计划 1keep二周计划 2百度第一期学完 3百度前端技术学院提升
- loj 6008 餐巾计划 - 费用流
题目传送门 传送门 题目大意 (经典题还不知道题意?) 容易想到需要把未使用的餐巾和已经使用的餐巾分开. 设$X_i$表示第$i$天已经的使用餐巾的点,设$Y_i$表示第$i$天还未使用的餐巾的点 我 ...
- MVC与单元测试实践之健身网站(六)-计划的添加与重置
健身计划需要使用者自己定制,没有现成的内容可供选择.本篇就是关于健身计划的添加与重置功能的一部分. 一 功能描述 a) 关于计划的定制,决定以周期的方式,比如有人会以一周为周期,然后安排每周的1.3. ...
- 项目管理实践 -- 健身小管家(Fitness housekeeper)的管理
最近在网上看到一篇文章<王石:我每天都强迫自己做的一件事>,[http://blog.sina.com.cn/s/blog_4dfc1c330102v0d0.html] 原始链接不详. ...
- 强大的健身软件——Keep
Keep是一款具有社交属性的健身工具类产品.用户可利用碎片化的时间,随时随地选择适合自己的视频健身课程,进行真人同步训练.完成后还可以"打卡"晒成就. 你可根据器械.部位.难度 ...
- MVC与单元测试实践之健身网站(完)-备案与部署
主页-http://www.zhixin9001.cn/Home/Introduce GitHub- https://github.com/zhixin9001/Fitness 这是关于Fit网站的最 ...
- MVC与单元测试实践之健身网站(一)-项目概述
前不久刚刚通过租房网站的开发学习了MVC,并随后学习了单元测试相关的基础,现在开始健身网站的开发,该项目将结合MVC与单元测试,在开发实践过程中,趁热打铁,巩固并运用之前的内容. 一 健身网站功能描述 ...
- 男女通用的减肥计划 10分钟家庭hiit训练
在大城市的年轻人,一般都会比较忙,晚上下班吃完饭,到家就要8-9点了,再让他们去,有时候真的不太方便. 其实你如果想要,也不一定要,在家里做hiit运动,就可以了. hiit(高强度间歇运动),是目前 ...
随机推荐
- centos v7.0解决乱码
[root@localhost ~]# ll 鎬荤敤閲4-rw-------. 1 root root 1045 8鏈 24 21:17 anaconda-ks.cfg [root@localhost ...
- Metinfo4.0 /member/save.php 任意用户密码修改
- 【DSP开发】ccsv6添加simulator功能
ccsv5更新到ccsv6后,ti去掉了simulator功能,具体的说法是"CCSv6 does NOT have any simulators. Texas Instruments is ...
- __strong修饰符
本文用来观察,对于__strong修饰符,编译器为我们自动添加了什么代码,这些代码对于引用计数有什么影响. 例子一 X __strong *x1 = [[X alloc] init]; 使用控制台打印 ...
- setter 和 getter 高级 以及内存管理初级
setter 和 getter 的演变,紧接setter 和 getter 初级 1.@property 和 @synthesize 这两个关键字的出现,就是为了剔除代码中的setter方法和get ...
- python requests的content和text方法的区别【转】
requests对象的get和post方法都会返回一个Response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等.其中返回的网页部分会存在.content和.text两个对 ...
- PythonDay13
第十三章 今日内容 匿名函数 内置函数二 闭包 匿名函数 匿名函数就是一行函数,关键字是lambda lambda x:x# lambda 参数:返回值x 是普通函数的形参 可以不定义形参:x 是 普 ...
- 常用的PHP函数封装,有排序和数据库操作函数
//二分查找 function bin_sch($array, $low, $high, $k) { if ($low <= $high) { $mid = intval(($low + $hi ...
- Hdu 4738【tanjan求无向图的桥】割边判定定理 dfn[x] < low[y]
题目: 曹操在长江上建立了一些点,点之间有一些边连着.如果这些点构成的无向图变成了连通图,那么曹操就无敌了.刘备为了防止曹操变得无敌,就打算去摧毁连接曹操的点的桥.但是诸葛亮把所有炸弹都带走了,只留下 ...
- Android 开源项目及库汇总(2)
Android 开源项目及库汇总(2) ListenToCode 2.7 2018.10.10 15:43 字数 8527 阅读 1001评论 0喜欢 29 地图 百度地图– Android百度地图 ...