求 n元一次不定方程 解的个数 的 两个版本和n种实现方法

版本1:

 有方程a1*x1+a2*x2+...an*xn=N,给定n(1000=>n>=1)个系数ai(1000>=ai>=0)和N(1000>=N>0),求满足这个方程的非负整数解(x1,x2...xn)的个数。(结果对10007取模)

 

实现1:

  构造母函数,(1+x^1+x^2+..x^(N/a1))^^a1*(1+x^1+x^2+..x^(N/a2))^^a2...(1+x^1+..x^(N/an))^^an

^^ai表示从从第一项中取出的项指数乘以ai;

这个函数展开后x^N前面的系数就是方程解的个数。

时间复杂度O(N^2*n);

 

实现2:

DP,f[N]+=f[N-a[i]] (1<=i<=n)

时间复杂度O(N*n)

 

 

 

版本2:

求方程x1+x2+…...+xn = m满足xi>=1的解的个数。


输入由多组数据组成。每组数据输入一行n和m(1<=n<=300,n<=m<=100000)。

由于方程的解的个数会超过整数范围,因此输出的结果对10007求余

 

实现1:

由于是上例的特殊情况,令a[i]都=1;

直接套用上例DP时间复杂度为O(m*n&#x

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值