C++ 给定N个范围。有多少种方法可以从这些范围中取N个数字,求和到某个值?

C++ 给定N个范围。有多少种方法可以从这些范围中取N个数字,求和到某个值?,c++,combinatorics,C++,Combinatorics,让我们有N范围[L,R]。我们必须从这些N范围中取N个数,这些数值加起来等于某个值C。我需要找出我们可以用多少方法来实现这一点,当然是使用MOD值(例如109+7) 例如,让我们有3个范围。我必须使C=10 2 5 3 4 2 4 因此,总共有24个组合。总共有6种方法可以使10种。i、 [2,4,4],[3,3,4],[3,4,3],[4,3,3],[4,4,2],[5,3,2] 约束条件: 0 < N <=110 0 < L, R <=50000 0

让我们有N范围[L,R]。我们必须从这些N范围中取N个数,这些数值加起来等于某个值C。我需要找出我们可以用多少方法来实现这一点,当然是使用MOD值(例如109+7)

例如,让我们有3个范围。我必须使C=10

2 5
3 4
2 4
因此,总共有24个组合。总共有6种方法可以使10种。i、 [2,4,4],[3,3,4],[3,4,3],[4,3,3],[4,4,2],[5,3,2]

约束条件:

0 < N <=110
0 < L, R <=50000

0N
范围
[L(1),R(1)],[L(2),R(2)],…,[L(N),R(N)]
,我们可以计算
f(i,c)
的个数,在第一个
i
范围中选择一个整数,使它们相加为
c
f(0,c)
的值非常明显:

f(0,0) = 1  
f(0,c) = 0 (for all c besides 0)

对于
f(i+1,c)
假设
L(i+1),任何帮助都将不胜感激。如果你试图解决这个问题,我们将不胜感激。你尝试了什么?我试图在Stackoverflow中找到答案。但失败了。因为我不知道这就是为什么我在这里分享它?我可以通过运行N个循环来完成。但这肯定需要很多时间。我认为可以用DP或任何类似的想法来完成,但我不能想出这样的想法。
f(i+1,c) = f(i, c-L(i+1)) + f(i, c-L(i+1)+1) + ... + f(i, c-R(i+1))