题意:有个无限大的有根树,每个节点都有N个孩子,每个孩子距离父亲节点的距离为di.求距离根节点距离<=x的节点个数.

思路:注意观察数据范围,每一个d[i]均小于等于100所以我们可以设dp[i]表示距离原点i的点的个数,sum[i]表示总和,最后求sum[x]即可。

状态转移方程

 for(int i=;i<=;i++)
{
for(int j=;j<=i;j++)
{
dp[i]=(dp[i]+dp[i-j]*cnt[j])%MOD;
}
sum[i]=(sum[i-]+dp[i])%MOD;
}

但是因为x太大,而且dp[n+1]是每个dp[i]*cnt[n+1-i],令N=100,保存n+1前100个数,并用第101列更新sum,用矩阵快速幂求解即可。(C是单位矩阵!!!)

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD=(ll)1e9+; struct matrix
{
ll x,y;
ll a[][];
matrix(){
};
matrix(ll xx,ll yy):x(xx),y(yy)
{
memset(a,,sizeof(a));
}
}Base; matrix mul (matrix A,matrix B)
{
matrix C(A.x,B.y);
for(int i=;i<=A.x;i++)
{
for(int j=;j<=B.y;j++)
{
for(int k=;k<=B.x;k++)
{
C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j])%MOD;
}
}
}
return C;
} ll n,x,cnt[],sum[],dp[];
void init()
{
memset(cnt,,sizeof(cnt));
scanf("%lld%lld",&n,&x);
for(int i=;i<=n;i++)
{
int p;
scanf("%d",&p);
cnt[p]++;
}
memset(sum,,sizeof(sum));
dp[]=; sum[]=;
for(int i=;i<=;i++)
{
for(int j=;j<=i;j++)
{
dp[i]=(dp[i]+dp[i-j]*cnt[j])%MOD;
}
sum[i]=(sum[i-]+dp[i])%MOD;
} Base.x=; Base.y=;
//123...97 98 99 100 101(ans) //000...000 len[100] len[100]
//100...000 len[99] len[99]
//010...000 len[98] len[98]
//.........................
//000...001 len[1] len[1]
//000...000 0 1
for(int i=;i<=;i++)
{
Base.a[i+][i]=;
Base.a[i][]=cnt[-i];
Base.a[i][]=cnt[-i];
}
Base.a[][]=Base.a[][]=cnt[];
Base.a[][]=;
} matrix qpow (matrix Base,ll b)
{
matrix C(Base.x,Base.y);
for(int i=;i<=;i++) C.a[i][i]=;//danweijuzhen
while(b)
{
if(b%==) C=mul(C,Base);
b/=;
Base=mul(Base,Base);
}
return C;
} int main()
{
init();
matrix A(,);
for(int i=;i<=;i++) A.a[][i]=dp[i];
A.a[][]=sum[];
if(x<=)
{
printf("%lld\n",sum[x]);
return ;
}
A=mul(A,qpow(Base,x-));
printf("%lld\n",A.a[][]%MOD);
return ;
}

最新文章

  1. 组合模式/composite模式/对象结构型模式
  2. java内存泄漏的定位与分析
  3. 习题-第5章Web自动化测试
  4. WCF多种调用方式兼容
  5. 使用saripaar对android输入控件进行快速验证
  6. github与eclipse创建仓库及克隆仓库
  7. Google地图接口API之地图控件集(五)
  8. HTML中的一些常见的事件句柄
  9. mysql view
  10. synergy--共享你的键鼠
  11. 使用自签SSL证书有什么风险?
  12. 一个优秀的http实现框架
  13. 转换GridView的内容到Excel里面 ---带有格式
  14. Sonya and Problem Wihtout a Legend
  15. ora-01440:要减小精度或标度,则要修改的列必须为空
  16. 在浏览器中运行Keras模型,并支持GPU
  17. JAVA程序员学PHP
  18. Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析
  19. SCCM2012 R2实战系列之七:软件分发(exe)
  20. CSS 小结笔记之变形、过渡与动画

热门文章

  1. 用CSS做导航菜单的4个理由
  2. 论文学习02-《On the Effectiveness of Visible Watermarks》
  3. 【数论】[SDOI2010]古代猪文
  4. arc098D Xor Sum 2
  5. react 组件的生命周期 超简版
  6. JavaScript中的表单编程
  7. 51nod-1130-N的阶乘的长度V2(斯特林近似)-套斯特林公式
  8. java生成验证码并可刷新
  9. python Six 模块
  10. 数组,List,Set相互转化