嗯。。csdn发得出markdown了。。请移步~ 个人觉得那个帅一点 嗯

好题啊!! 矩乘+DP

蒟蒻的我一开始发现了斐波那契数列之后就不会搞了。。

那个。。什么质量相同两种方案相同就是扯淡的。。想想就知道没有这种情况

先来说一下为什么是斐波那契

假设最后有n个点 则有n-1条东西 如果用f[x][0/1] 表示第x条割还是不割

不难得到方程f[x][0]=f[x-1][1],f[x][1]=f[x-1][0]+f[x-1][1] 答案是f[n-1][1] (最后一条一定要割)

化一下就是f[x][1]=f[x-1][1]+f[x-2][1] 嗯。。其实是不是斐波那契都行 因为变成矩乘都一样(不要问我为什么)

答案就是所有分割方案的 ∑ Fib[s-2]

可是你知道s会很大。。打到快速幂也玩不了

这时还需要一个按位的dp

f[i] = ∑ f[j-1]*k^x (1<=j<=i)

x表示j到i表示的数

K就是斐波那契矩阵

0 1

1 1

因此我们来进行拆位 预处理出k的10进制次幂(10,100,^1000...)

为了方便 让 f数组用矩阵表示 f[0]=k^(-2)

答案就是 f[n][2][2]

#include<bits/stdc++.h>
#define me(a,x) memset(a,x,sizeof a)
using namespace std;
typedef long long LL;
const int N=1005;
const LL mod=1000000007;
inline int read()
{
char ch=getchar(); int x=0,f=1;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
struct P{
LL c[3][3];
P(){me(c,0);}
}a[N],f[N];
char s[N]; int n;
P cheng(P a,P b)
{
P c;
for(int i=1;i<3;i++)for(int j=1;j<3;j++)
for(int k=1;k<3;k++)(c.c[i][j]+=(a.c[i][k]*b.c[k][j])%mod)%=mod;
return c;
}
void add(P &a,P b)
{
for(int i=1;i<3;i++)for(int j=1;j<3;j++)(a.c[i][j]+=b.c[i][j])%=mod;
}
int main()
{
scanf("%d%s",&n,s+1);
f[0].c[1][1]=2,f[0].c[1][2]=f[0].c[2][1]=-1,f[0].c[2][2]=1;
a[0].c[1][2]=a[0].c[2][1]=a[0].c[2][2]=1;
int i,j;
for(i=1;i<=n;i++)
{
P u=a[i]=a[i-1];
for(int x=9;x;x>>=1,u=cheng(u,u))
if(x&1)a[i]=cheng(a[i],u);
}
for(i=1;i<=n;i++)
{
P k; k.c[1][1]=k.c[2][2]=1;
for(j=i;j>0;j--)
{
int x=s[j]-'0';
while(x--)k=cheng(k,a[i-j]);
add(f[i],cheng(f[j-1],k));
}
}
printf("%lld\n",(f[n].c[2][2]+mod)%mod);
return 0;
}


BZOJ 2323: [ZJOI2011]细胞的更多相关文章

  1. 【BZOJ 2323】 2323: [ZJOI2011]细胞 (DP+矩阵乘法+快速幂*)

    2323: [ZJOI2011]细胞 Description 2222年,人类在银河系外的某颗星球上发现了生命,并且携带了一个细胞回到了地球.经过反复研究,人类已经完全掌握了这类细胞的发展规律: 这种 ...

  2. BZOJ 2323 细胞(矩阵)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2323 题意: 题意过于复杂,我直接简化下.给出一个长度为n的数字串,只包含1到9,将数字 ...

  3. bzoj 2324 [ZJOI2011]营救皮卡丘(floyd,费用流)

    2324: [ZJOI2011]营救皮卡丘 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1777  Solved: 712[Submit][Stat ...

  4. BZOJ 2324: [ZJOI2011]营救皮卡丘( floyd + 费用流 )

    昨晚写的题...补发一下题解... 把1~N每个点拆成xi, yi 2个. 预处理i->j经过编号不超过max(i,j)的最短路(floyd) S->0(K, 0), S->xi(1 ...

  5. BZOJ.2324.[ZJOI2011]营救皮卡丘(费用流 Floyd)

    BZOJ 洛谷 首先预处理出\(dis[i][j]\),表示从\(i\)到\(j\)的最短路.可以用\(Floyd\)处理. 注意\(i,j\)是没有大小关系限制的(\(i>j\)的\(dis[ ...

  6. [ZJOI2011]细胞——斐波那契数列+矩阵加速+dp

    Description bzoj2323 Solution 题目看起来非常复杂. 本质不同的细胞这个条件显然太啰嗦, 是否有些可以挖掘的性质? 1.发现,只要第一次分裂不同,那么互相之间一定是不同的( ...

  7. bzoj2323: [ZJOI2011]细胞

    这题真神... 首先看到这么花里胡哨的题面眉头一皱就发现这个球的大小是搞笑的不然就没法做了,有用的是最终拆出来的长度 然后对于一段长度为n有n-1个丝状物的东西,写一个DP:f[i][2]表示枚举到第 ...

  8. bzoj 2324: [ZJOI2011]营救皮卡丘

    #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu ...

  9. bzoj 2229 [Zjoi2011]最小割(分治+最小割)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2229 [题意] 回答若干个关于割不超过x的点对数目的询问. [思路] [最小割最多有n ...

随机推荐

  1. 【Foreign】画方框 [主席树]

    画方框 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output 输出一行一个整数,表示 CD 最多可能画了几个方框. Sam ...

  2. google protobuf序列化原理解析 (PHP示例)

    一.简介 Protocol Buffers是谷歌定义的一种跨语言.跨平台.可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据量小, ...

  3. MyBatis 框架系列之基础初识

    MyBatis 框架系列之基础初识 1.什么是 MyBatis MyBatis 本是 apache 的一个开源项目 iBatis,后改名为 MyBatis,它 是一个优秀的持久层框架,对 jdbc 的 ...

  4. 【洛谷 P3628】 [APIO2010]特别行动队 (斜率优化)

    题目链接 斜率优化总结待补,请催更.不催更不补 \[f[i]=f[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c\] \[=f[j]+a*sum[i]^2+a*s ...

  5. WordPress在nginx服务器伪静态

    server { listen 80; root /var/www/xxx; server_name www.xxx.com; access_log /var/log/www/xxx.log main ...

  6. python初步学习-python控制流

    语句书写规范 缩进在python语言书写中非常重要,如果缩进不规范,执行程序将会报错 引用维基百科中的叙述: Python開發者有意讓違反了縮排規則的程序不能通過編譯,以此來強迫程序員養成良好的編程習 ...

  7. 空间数据库系列二:空间索引S2与Z3分析对比

    S2与Z3对比分析 1. S2 2. Geohash 3. Geomesa Z3 4. S2对比geohash 4.1. geohash存在的问题 4.2. S2优势 4.3. 实际对比例子 5. 测 ...

  8. Java中class的初始化顺序

     由于Java 中的一切东西都是对象,所以许多活动 变得更加简单,这个问题便是其中的一例. 除非真的需要代码,否则那个文件是不会载入的.通常,我们可认为除非那个类的一个对象构造完毕,  否则代码不会真 ...

  9. php快速入门总结

    因为本人已经接触了C和C++两年多了,虽然真正用它们的机会很少,但是基本的语法还是相对熟悉的.半年前的课程设计用了PHP,所以当初我也只是现学先用, 学得很粗糙,现在,跟一个同学合作搞一个比赛的项目, ...

  10. uoj#35 后缀排序(后缀数组模版)

    #include<bits/stdc++.h> #define N 100005 using namespace std; char s[N]; int a[N],c[N],t1[N],t ...