模板题。选择数据在最小和最大范围内,所以循环k坐下约束即可。
#include<bits/stdc++.h>
using namespace std;
int c1[105],c2[105];
struct node
{
int x,y;
}nn[103];
int main() {
int n,m;
while (cin >> n >> m) {
memset(c1, 0, sizeof(c1));
memset(c2, 0, sizeof(c2));
for (int i = 1; i <=n; i++)
cin >>nn[i].x>>nn[i].y;
c1[0] = 1;
for (int i = 1; i <=n; i++) {
for (int j = 0; j <= m; j++)
for (int k =nn[i].x; k <= nn[i].y && j + k <= m; k++)
{
c2[j + k] += c1[j];
}
memcpy(c1, c2, sizeof(c2));
memset(c2, 0, sizeof(c2));
}
cout << c1[m] << endl;
}
}