/*
母函数题;只是限定了一些范围,加上就可以了;
http://acm.hdu.edu.cn/showproblem.php?pid=2152
*/
#include <iostream>
using namespace std;
#define maxn 105
int a[maxn],b[maxn],minum[maxn],maxnum[maxn];
int main()
{
int n,m;
while(cin>>n>>m)
{
for(int i = 0; i < n; i++)
{
cin>>minum[i]>>maxnum[i];
}
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i = minum[0]; i <= maxnum[0]; i++)
a[i] = 1;
for(int i = 1; i < n; i++)
{
for(int j = 0; j <= m; j++)
{
for(int k = minum[i]; k + j<=m && k <= maxnum[i];k++)
{
b[j+k] += a[j];
}
}
for(int j = 0; j <= m; j++)
{
a[j] = b[j];
b[j] = 0;
}
}
cout<<a[m]<<endl;
}
}
本文介绍了一种解决母函数问题的方法,通过限定范围内的输入来计算特定输出值的个数。该算法采用动态规划思想,逐步更新中间结果数组,最终得到所求答案。
679

被折叠的 条评论
为什么被折叠?



